0

char [20] 内の文字の位置を出力する方法を見つけるのに苦労しています。誰でも私を助けることができますか?

int emfanisi(char a[])
{
    int i, mikos;
    char b;

    printf("Dose xaraktira\n");
    scanf("%s", b);
    mikos = strlen(a);
    for(i=0; i<mikos; i++)
    {
        if(a[i] == b)
            return i;
        break;
    }
}
4

4 に答える 4

3

問題は、最初の反復でcharが一致しない場合、ループが中断することです。以下に変更が加えられています。

ちなみに、文字列内の文字を見つける関数はすでにあります strchr(str,char)

コード:

int emfanisi(char a[])
{
    int i, mikos;
    char b;

    printf("Dose xaraktira\n");
    scanf("%c", &b);
    mikos = strlen(a);
    for(i=0; i<mikos; i++)
    {
        if(a[i] == b)
            return i;
    }
    return -1; //Indicate doesn't found.
}
于 2013-01-24T16:16:59.697 に答える
1

文字列内の文字を検索し、配列内に存在する場合は配列内の位置を返そうとしています。

をスキャンする必要がcharacterあります。string

このように scanf() を変更して、条件チェックがif(a[i] == b)機能するようにします

scanf("%c", &b);

また、文字列内に文字が見つからない場合のエラー状態を含めます。for ループ内では、for ループの後戻りは発生しません。

return -1;
于 2013-01-24T16:24:02.353 に答える
1

strchr 関数を使用して、必要なことを行うことができます。

strchr() 関数は、s が指す文字列内で最初に出現する c (char に変換されたもの) を見つけます。終端の null バイトは文字列の一部と見なされます。

http://pubs.opengroup.org/onlinepubs/009695399/functions/strchr.html

戻り値が null でない (文字が見つかった) 場合は、次を使用してインデックスを取得できます。

const char* res = strchr(cstr,'A');
int index = cstr-res; //< NOTE: you should check that res != 0
于 2013-01-24T16:12:33.390 に答える
0

それはあなたが望むことをするはずです:

const char * pos = strchr(your_string, character_you_search_for);
if(!pos)
  printf("not found\n");
else
  printf("position is : %d\n", pos - your_string);

strchr は最初に出現した文字へのポインターを返すため、そこから your_string を引くと、そのオフセットが得られます。

于 2013-01-24T16:14:03.253 に答える