Как мне посчитать, сколько раз буква появляется в строке? C программирование - PullRequest
1 голос
/ 29 марта 2020

Я пытаюсь написать программу, которая скажет мне, сколько букв «е» в фразе «Вчера все мои проблемы казались такими далекими». Я пытаюсь сделать это, используя функцию strcmp, и я хочу сравнить каждую букву в фразе с буквой «е», а затем сделать так, чтобы счетчик увеличивался.

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

Ответы [ 2 ]

2 голосов
/ 29 марта 2020

Для начала использовать функцию 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.
2 голосов
/ 29 марта 2020

Вы можете просто сравнить свои строковые символы с символом '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);
}
...