1. ホーム
  2. c

[解決済み] ある文字列が他の文字列で始まっているかどうかをチェックするには?

2023-01-05 14:40:43

質問

のようなものはありますか? startsWith(str_a, str_b) のようなものが標準のCライブラリにありますか?

nullbytesで終わる2つの文字列へのポインタを取り、最初の文字列が2番目の文字列の最初にも完全に現れるかどうかを教えてくれるはずです。

例を挙げます。

"abc", "abcdef" -> true
"abcdef", "abc" -> false
"abd", "abdcef" -> true
"abc", "abc"    -> true

どのように解決するのですか?

どうやら、このためのCの標準的な関数はないようです。というわけで。

bool startsWith(const char *pre, const char *str)
{
    size_t lenpre = strlen(pre),
           lenstr = strlen(str);
    return lenstr < lenpre ? false : memcmp(pre, str, lenpre) == 0;
}


上記はわかりやすくていいのですが、タイトなループでやっていたり、あるいは 非常に のような大きな文字列を扱う場合、両方の文字列の全長を前もってスキャンしてしまうため、最高のパフォーマンスを提供するわけではありません ( strlen ). 解決策としては wj32の または クリストフ はより良いパフォーマンスを提供するかもしれません (ただし このコメント は私のC言語の知識を超えています)。また Fred Foo の解決策 を回避する strlenstr (を使用する場合は不要です。 strncmp の代わりに memcmp ). (非常に) 大きな文字列や、タイトなループで繰り返し使用する場合にのみ重要ですが、重要なときは重要です。