C语言有关字符串的统计单词数目的问题

输入一段带空格的宇符串 (以‘.’结尾),判断其中的单词有多少个。

提示:只要是连续的纯英文字符即为单词,其他不算单词。

输入示例:This is abc Lab 1234 234b.

输出示例:其有4个单词

通过getchar逐个字符接收,遇到空格判断是否单词

#include <stdio.h>
int main()
{
    char c;
    int cnum = 0,count= 0 ;
    while((c=getchar()) != '.')
    {
        if(c==' ')
        {
            if(cnum > 0)
                count++;
            cnum = 0;
        }
        else if((c>='a' && c<='z') || ( c>='A' && c<='Z'))
        {
            if(cnum >= 0)
                cnum++;
        }
        else
        {
            cnum = -1;
        }
    }
    if(cnum > 0)
        count++;
    printf("%d",count);
    return 0;
}

分别对每个小字符串统计字母个数看是不是等于下标之差,依次来判断是不是单词

img

#include <stdio.h>
int main()
{
    int i,j=0,num=0,f=0;
    char s[200];
    gets(s);
    for(i=0; s[i]!='.'; i++)
    {
        if((s[i]>='a' && s[i]<='z') || (s [i]>='A' && s[i]<='Z'))
            f++;
        if((s[i]==' ')&&(i-j)==f)
        {
            f=0;
            num++;
            j=i+1;
        }
    }
    printf("%d",num);
    return 0;
}

几个测试结果:

img

img

img

代码如下,代码里几乎每一行都有注释:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int n = 0; //记录单词数量
    int flag = 1; //状态,是否已经开始判定,以空格是否出现为标记,刚开始时标记为1
    int flag_char = 0; //状态位,记录是否已经开始出现字母
    char ch;
    while (1)
    {
        ch = getchar();
        if (flag == 1)//表示开始判定字符
        {
            if (flag_char == 1)
            {
                if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
                    continue;
                else if (ch == ' ') //出现空格,表示上一个单词结束,开始下一个单词
                {
                    n++; //单词数+1
                    flag = 1; //开始记录
                    flag_char = 0; //重置字母出现标记
                }
                else if (ch == '.')
                {
                    n++; //单词数+1
                    flag = 1; //开始记录
                    flag_char = 0; //重置字母出现标记
                    break;//结束循环
                }
                else
                {
                    flag = 0;//出现了其它字符,表示非单词,重置记录标志
                    flag_char = 0;
                }
            }
            else
            {
                if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
                    flag_char = 1;
                else if (ch == ' ')
                    continue;
                else if (ch == '.')
                    break;
                else
                {
                    flag = 0; //出现其它字符,说明非单词
                    flag_char = 0;
                }
            }

        }
        else  //还没开始判定,出现的任何字母、数字都被忽略,直到出现空格和. 出现空格表示可以开始判定了,出现.表示需要结束读取了
        {
            if (ch == ' ') //出现空格,开始判定
            {
                flag = 1;
                flag_char = 0;
            }
            else if (ch == '.')//出现.  结束读取
                break;
            else
                continue; //其它字符,继续读取,直到出现空格为止
        }
    }



        
    printf("%d", n);
    return 0;
}