我有興趣獲得子字符串,然後將其轉換爲long int
以供進一步處理。我需要爲大量的字符串做這個。目前我所做的是使用.substr()
,如以下示例Test所示。以最快的方式獲取子字符串
// Example program
#include <iostream>
#include <string>
int main()
{
std::string content = "123421341234432231112343212343";
unsigned long int sub = atol(content.substr(0,18).c_str());
std::cout << "sub: " << sub << '\n';
return 0;
}
我想知道最快的方法來做到這一點。它並不總是.substr(0,18)
,它可以是任何長度爲18(如果不是18,則爲剩餘長度).substr(i,18)
。
編輯: 關於字符串的數量,大約3000萬,大約快(我想獲得一個子副本,然後轉換爲長整型是一個緩慢的過程,我希望它是快於.substr()
方法。) 。說實話,我希望它儘可能快。
實際上,這些字符串位於fasta
文件中,我一次讀取每個文件,並刪除不需要的內容boost::split()並存儲所需的內容。然後我需要做不同的字符串子字符串進一步處理。
當你說「大數」你是什麼意思?當你說「最快的方式」你是什麼意思?比*什麼*更快?你的基線「堅牢度」是什麼?你如何衡量和配置文件?你爲什麼認爲你展示的代碼不是「最快」的?請詳細說明! –
@Someprogrammerdude謝謝,請看編輯。 – AwaitedOne
你可以跳過創建std :: strings並使用'char *'s。如果你想得到的子串總是(0,18),你可以使用破壞性的方法,例如:'char * content =「whatever」; content [19] = 0;'切斷字符串的結尾。 – Steeve