別の文字列内の指定された文字列を検索したい。前回の計算で知られている可能性のある開始点。例:std :: memcmpまたはstring :: compareとの部分文字列の比較?
int main()
{
std::string input("Foo Bar Hash Bang");
std::string keyword("Bar");
const char* inputStart = input.c_str() + 4; // at 'B'
std::cout << "memcmp=" << std::memcmp(inputStart, keyword.c_str(), keyword.length()) << "\n";
std::cout << "compare=" << input.compare(4, keyword.length(), keyword) << "\n";
return 0;
}
は両方とも同等か?キーワードの長さが開始位置からの入力長を超えた場合、memcmp
との比較は正しいです。 strncmp
はより安全なアプローチですか?
std :: stringによって提供されるfind()メソッドを使用しないのはなぜですか? –
@Oz。パフォーマンス。その時点で、私はすでに可能なキーワードの位置と長さを知っています。 find()では、入力文字列全体のすべてのキーワードに対してfindを呼び出さなければなりません。入力文字列にはキーワードがまったくないかもしれません。 – aggsol