2

検索機能を使用して文字列内の各文字の数を数え、表示されるたびに追加しようとしています。

これまでの私のプログラムは次のとおりです

            #include<stdio.h>


            int countCharactersCaseSensitive(char *inStr, char);

            int main()
            {
                char ascii[52];
                int capital = 65;
                int i;
                for (i = 0; i <26; i++)
                {
                    ascii[i] = capital;
                    capital++;
                }
                int lower = 97;
                for (i=26; i< 52; i++)
                {
                    ascii[i] = lower;
                    lower++;
                }


                char *str = "Programming Assignment";
                int count[52];
                for (i=0;i<52;i++)
                {
                    char check = ascii[i];
                    count[i] = countCharactersCaseSensitive(str,check);

                }

                    for(i=0;i<52;i++)
                {
                    printf("%c%10d\n",ascii[i],count[i]);
                }

            }


            int countCharactersCaseSensitive(char *inStr, char check)
            {
                int i;
                int count = 0;
                int length = strlen(inStr);
                for (i=0;i<length;i++)
                {
                    if(check == *inStr)
                    {
                        inStr++;
                        count++;
                    }
                }
                return count;
            }

しかし、P のみをチェックします。これを修正して、文字列内の他の文字をチェックするにはどうすればよいですか?

4

3 に答える 3

3
for (i=0;i<length;i++)
{
    if(check == *inStr)
    {
        inStr++;
        count++;
    }
}

チェック文字が見つかった場合にのみ、inStr を進めます。繰り返しごとに進める必要があります。

for (i = 0; i < length; i++, inStr++)
{
    if (check == *inStr)
    {
        count++;
    }
}
于 2013-11-12T21:40:55.443 に答える
0

検索しようとしている文字列を実際に進めているわけではありません。次の 2 つの変更のいずれかをお勧めします。

int length = strlen(inStr);
for (i=0;i<length;i++)
{
     if(check == inStr[i])
     {
         count++;
     }
}

また

char * strPtr;

for (strPtr = inStr; *strPtr; strPtr++)
{
     if(check == *strPtr)
     {
         count++;
     }
}
于 2013-11-12T21:45:04.993 に答える
0

このため

if(check == *inStr) 
{
    inStr++;
    count++;
}

一致する場合にのみポインターをインクリメントします。最初の文字は aPであり、その文字は 1 回しか発生しないため、1 しか得られません。P

if ステートメントの外でインクリメントする必要があります。

どちらか

if(check == *inStr) 
{
    count++;
}
inStr++;

また

if(check == inStr[i]) 
{
    count++;
}
于 2013-11-12T21:40:43.180 に答える