Найти количество слов, содержащих ровно три буквы «А». Си

Введена строка, состоящая из слов, набранных прописными буквами и разделенных пробелами (одним или несколькими). Найти количество слов, содержащих ровно три буквы «А». У меня есть код:

#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);
}
→ Ссылка