1

これは私がこれまでに持っているものです:

for(i = 0; i <= 9; i++){
    printf("%d", i);
    found = strpbrk(nameholder[i], searchterm);
    if(strpbrk(nameholder[i], searchterm) == searchterm){
        printf("found\n");
        foundwhere = i + 1;
        break;
    }
}// end for

プログラムを実行すると、strpbrk関数は文字列を検出しますが、何らかの理由でifステートメントがトリガーされることはありません。私は何が欠けていますか?

4

2 に答える 2

2

http://en.cppreference.com/w/c/string/byte/strpbrkによるとstrpbrk()

const char* strpbrk( const char* dest, const char* str );
が指すバイト文字列の最初の文字を検索します。destこれは、が指すバイト文字列にもありますstr

したがって、 inの文字ではなく全体 を本当に検索したい場合は、またはを使用する必要があります。searchtermsearchtermnameholder[i]strcmpstrstr

また、演算子==を使用して2つの文字列の等価性を比較することはできませんchar*。これは、アドレスが等しいか、文字列の内容を無視していないかを単純に比較するためです。strcmp()代わりに使用してください。

于 2012-09-18T17:06:04.490 に答える
-1

あなたがやろうとしていることを私が正しく理解していれば(あなたの説明は曖昧です)、あなたは間違った関数を使用しているようです。

strpbrkでのcppドキュメントの引用:

str2の一部である文字のいずれかがstr1で最初に出現するポインタを返します。一致するものがない場合は、nullポインタを返します。

それはあなたが望んでいることではありませんよね?あなたは機能を見ているは​​ずstrcpmです。 http://www.cplusplus.com/reference/clibrary/cstring/strcmp/

コードは次のようになります。

for(i = 0; i <= 9; i++){ 
    if(strcmp(nameholder[i], searchterm) == 0){
        printf("found\n");
        foundwhere = i + 1;
        break;
    }
}// end for
于 2012-09-18T17:07:02.853 に答える