17、输入一行以空格分隔的英文,判断其共有多少单词,不能包含冠词a

/*输入一行以空格分隔的英文,判断其共有多少单词,不能包含冠词a */
#include <stdio.h>
#include <stdlib.h>
int isWord(char *pWord,int wordArraLength)
{
    if(1 == wordArraLength && (('A' == *pWord || 'a' == *pWord)))
        return 0;
    return 1;
}
int countWordIn(char *pStr)
{
    int cnt = 0;//记录符合要求的单词数
    while('\0' != *pStr)//\0’是字符串的结束符号,由编译器自动加上  //从单词的第一个字母开始,读入字符存储到数组中
    {
        char wordArra[10] = {0};
        int wordArraLength = 0;
        while('\0' != *pStr && ' ' != *pStr)//从当前位置开始,遇到空格停止
        {
            wordArra[wordArraLength] = *pStr;
            ++wordArraLength;
            ++pStr;
        }
        int ret = isWord(wordArra,wordArraLength);//判断是否为单词,排除冠词a的情况
        if(1 == ret)//非冠词a是一个单词
            ++cnt;
        while('\0' != *pStr && ' ' == *pStr)//过滤空格,来到下一个单词的第一个字符
        {
            ++pStr;
        }
    }
    return cnt;
}
int main()
{
    char sentence[1000];
    gets(sentence);
    /*
    //从stdin流中读取字符串,直至接受到换行符或EOF时停止,
    并将读取的结果存放在buffer指针所指向的字符数组中。
    换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。

    scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:
    (不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。

  ① 遇空格、“回车”、“跳格”键。

  ② 遇宽度结束。

③ 遇非法输入。
    */
    printf("%s\n",sentence);
    int cnt = countWordIn(sentence);
    printf("%d",cnt);
    return 0;
}

posted @ 2021-09-22 21:35  叶梓渔  阅读(151)  评论(0)    收藏  举报