1

我正在尝试编写一个程序来告诉我“昨天,我所有的麻烦似乎都如此遥远”这句话中有多少个“e”字母。我正在尝试使用 strcmp 函数来执行此操作,并且我想将短语中的每个字母与字母“e”进行比较,然后使其计数增加。

int main(void) {
  int i, x, count = 0;
  char words[] = "Yesterday, all my troubles seemed so far away", letter;
  char str1 = "e";
  for (i = 0; i < 45; i++) {
    letter = words[i];
    x = strcmp(letter, str1);
    if (x == 0) {
      count++;
    }
  }
  printf("The number of times %c appears is %d.\n", str1, count);
}
4

2 回答 2

2

对于初学者来说,使用该函数strcmp来计算字符串中字符的出现次数是一个坏主意。相反,您应该使用该功能strchr

本声明

char str1 = "e";

是无效的。在此声明中,指向字符串文字的第一个字符的指针"e"被转换为char没有意义的类型的对象。

的呼唤strcmp

x = strcmp(letter, str1);

需要两个类型的参数,const char *而在此语句中传递了两个类型的对象char。所以调用会调用未定义的行为。

您可以按照以下方式编写一个单独的函数,如下面的演示程序所示。

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

size_t letter_count( const char *s, char c )
{
    size_t n = 0;

    if ( c != '\0' )
    {
        for ( const char *p = s; ( p = strchr( p, c ) ) != NULL; ++p )
        {
            ++n;
        }
    }

    return n;
}

int main(void) 
{
    char words[] = "Yesterday, all my troubles seemed so far away";

    char c = 'e';

    printf( "The number of times %c appears is %zu.\n", 
            c, letter_count( words, c ) );

    return 0;
}

程序输出为

The number of times e appears is 6.
于 2020-03-29T11:40:35.883 回答
2

'e'您可以像这样简单地将字符串字符与字符进行比较

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

int main(void)
{
    int i, count = 0;
    char words[] ="Yesterday, all my troubles seemed so far away";

    for (i = 0; i < strlen(words); i++){
        if (words[i] == 'e') {
            count++;
        }
    }
    printf("The number of times %c appears is %d.\n", 'e', count);
}
于 2020-03-29T11:30:54.957 回答