3

これらの文字列を考えると

char * foo = "The Name of the Game";

char * boo = "The Name of the Rose"

共通ヘッダー (「 The Name of the」)を抽出するために、最初に一致しない文字のアドレスを特定したいと考えています。

手作業でコーディングされたループが些細なことであることは知っていますが、strcmp()これを自動的に実行するバリアントまたは他のライブラリ関数があるかどうかに興味がありますか? そして答えはC ++で何か違うのですか?

4

3 に答える 3

1

いいえ。そのような標準string.h関数は存在しません。

于 2013-02-12T20:55:59.373 に答える
0

この単純な関数は、を使用して、必要なことを実行できると思いますstrncmp
(軽くテストされています...)

int find_mismatch(const char* foo, const char* boo) 
{
    int n = 0;
    while (!strncmp(foo,boo,n)) { ++n; }
    return n-1;
}

int main(void)
{
    char * foo = "The Name of the Game";
    char * boo = "The Name of the Rose";
    int n = find_mismatch(foo,bar);

    printf("The strings differ at position %d (%c vs. %c)\n", n, foo[n], boo[n]);
}

出力
The string differ at position 16 (G vs. R)

于 2013-02-11T18:01:10.983 に答える
-2

str2の一部のみで構成されるstr1の最初の部分の長さを返すstrspn(str1、str2)を使用できると思います。

char *foo = "The Name of the Game";
char *boo = "The Name of the Rose";
size_t len = strspn(foo, boo);

printf("The strings differ after %u characters", (unsigned int)len);
于 2013-02-11T18:07:30.467 に答える