サブストリングを取得し、それをさらに処理するためにlong int
に変換することに興味があります。私は多数の文字列に対してこれを行う必要があります。現在、私がしているのは、Testのように、.substr()
を使用しています。サブストリングを最速で取得する
// 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)
。
編集:文字列の数について 、約30万人程度速い(私はサブストリングのコピーを取得すると思うし、次にlong intに変換すると、ゆっくりとしたプロセスである私はそれが.substr()
方法よりも高速になりたいです。) 。正直言って、私はできるだけ速くしたい。
実際には、文字列はfasta
ファイル内にあり、それぞれを一度に読み取って不要なコンテンツをboost::split()で削除し、必要なコンテンツを保存します。次に、さらなる処理のために文字列の異なる部分文字列を取得するという異なるパスを実行する必要があります。
「大量」と言うとき、それはどういう意味ですか?あなたが「最速の方法」と言ったら、それはどういう意味ですか? *何よりも速い?あなたのベースラインの「堅牢性」は何ですか?どのように測定し、プロファイルしますか?なぜあなたが表示するコードが「最速」ではないと思いますか?詳しく教えてください! –
@Someprogrammerdudeありがとう、親切に編集を参照してください。 – AwaitedOne
std :: stringsの作成をスキップし、 'char *'を使うことができます。取得したい部分文字列が常に(0,18)であれば、破壊的なメソッドを使うことができます: 'char * content =" whatever "; content [19] = 0; '文字列の最後を切り取る。 – Steeve