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