Найти количество слов, содержащих ровно три буквы «А». Си
Введена строка, состоящая из слов, набранных прописными буквами и разделенных пробелами (одним или несколькими). Найти количество слов, содержащих ровно три буквы «А». У меня есть код:
#include <string.h>
#include <stdio.h>
int main()
{
char s[]=" ШЛА САШАА ПО ШОССЕ И СОСАЛА СУШКУ ";
unsigned counter = 0;
char *cc;
for(char *c=strtok(s," ");c;c=strtok(0," "))
counter += (((cc = strchr(c,'А')))&&(strchr(cc + 1,'А'))&&(strchr(c + 2,'А')));
printf("%u\n", counter);
}
Но он находит две и более букв "А". А мне нужно ровно три!!! Помогите пожалуйста кто знает как.
Ответы (2 шт):
Автор решения: Harry
→ Ссылка
Так годится?
int AAA(const char * word)
{
int cnt = 0;
while(*word)
{
if (*word == 'А') ++cnt;
++word;
}
return cnt == 3;
}
int main()
{
char s[]= " ШЛА САШАА ПО ШОССЕ И СОСАЛА СУШКУ ";
unsigned counter = 0;
for(char *c=strtok(s," ");c;c=strtok(0," "))
counter += AAA(c);
printf("%u\n", counter);
}
Автор решения: ok-home
→ Ссылка
Доброе утро.
можно намного проще.
int main()
{
char *c = " ШЛА САШАА ПО ШОССЕ И СОСАЛА СУШКУ ";
int cnt_A = 0;
int cnt_W = 0;
while (*c)
{
if (*c == ' ')
{
if (cnt_A == 3)
{
cnt_W++;
}
cnt_A = 0;
}
else if (*c == 'A')
{
cnt_A++;
}
c++;
}
printf("%u\n", cnt_W);
}