试图计算字符串C程序中每个字符的数量

时间:2013-11-12 21:34:51

标签: c

我正在尝试使用搜索功能计算字符串中每个字符的数量,并在每次出现时添加。

到目前为止,这是我的程序

            #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,我如何修复此问题以检查字符串中的其他字符?

3 个答案:

答案 0 :(得分:3)

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

您只有在找到支票字符时才会提前输入。你需要每次迭代都要推进它。

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

答案 1 :(得分:0)

因为这个

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

只有在指针匹配时才递增指针,并且由于第一个char是P而且只有一次出现,P

只得到1

你需要在if语句之外增加。

要么

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

if(check == inStr[i]) 
{
    count++;
}

答案 2 :(得分:0)

你实际上并没有通过你想要搜索的字符串前进。 我建议这两个变化之一:

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++;
     }
}