c-查找字符串中出现的字符数

时间:2018-01-19 14:50:03

标签: c

#include <stdio.h>
#include <string.h>

#define SIZE 40

int main(void)
{
    char buffer1[SIZE] = "computer program";
    char  *ptr;
    int    ch = 'p', j = 0, i;

    for (i = 0; i<strlen(buffer1); i++)
    {
        ptr = strchr(buffer1[i], ch);
        if (ptr != 0) j++;
        printf(" %d ", j);
    }
}

我想计算一个字符在字符串中出现的次数。 在我的节目中,我选择了角色'p'。

我认识Pascal,我现在正在学习C.在pascal中是一个名为Pos(x,y)的函数,它在y中搜索x。这是熟悉的吗?我想我在这里使用的不是。

2 个答案:

答案 0 :(得分:3)

strchr的功能签名是

 char *strchr(const char *s, int c);

您需要传递char*,但已通过char。这是错的。

你在循环中使用了strlen - 使其效率低下。只计算一次字符串的长度,然后迭代它。

char *t = buffer;
while(t!= NULL)                                                                                                    
{                                                                                                                       
    t = strchr(t, ch);                                                                                                           
    if( t ) {
        t++;
        occurences++;
    }                                                                                                
}

如果不使用标准库函数,您只需循环遍历char数组。

size_t len = strlen(buffer);
for(size_t i = 0; i < len; i++){
    if( ch == buffer[i]) occurences++;
}

或者不使用strlen

   char *p = buffer;
   while(*p){
      if( *p == ch ){ 
         occurences++;
      }
      p++;
   }

或者

for(char *p = buffer; *p; occurences += *p++ == ch);

答案 1 :(得分:-2)

试试这个例子:

    int main()
    {
       char buffer1[1000] = "computer program";
       char ch = 'p';
       int i, frequency = 0;


       for(i = 0; buffer1[i] != '\0'; ++i)
       {
           if(ch == buffer1[i])
               ++frequency;
       }

       printf("Frequency of %c = %d", ch, frequency);

       return 0;
    }