计算单词数--空格不一定一个

本文介绍了一个使用C语言编写的简单程序,该程序能够通过分析输入的字符串来统计其中包含的单词数量。通过巧妙地利用状态切换的方法,即通过跟踪当前字符是否为空格来确定单词边界,从而实现单词计数。

1.输入字符串并存到数组中,利用gets();
2.运用假设法判断,假设第一次为真,之后遇到空格则变为假,直到遇到单词再变为真

每次单词数加一的条件出现在第二个单词的第一个字母,然后恢复之前的循环。

#include <stdio.h>

#include <stdlib.h>


int main()
{
    char str[100];
    int count=0;
    gets(str);
    int a=1,i;//假设读取到字母时数字为正,
    for(i=0;str[i]!='\0';i++)
    {
        if(str[i]==' ')
            a=0;//当读取到空格时为假,当空还未结束时不执行下面else语句
        else
        {
            if(a==0)
            {
                a=1;//当上面遇到下一个单词字母时,单词数加一,并将假设恢复为正持续上述循环
                count+=1;
            }
        }
    }
    printf("%d",count+1);
    return 0;
}
统计一行文本单词个数有多种方法,以下为几种不同的实现方式: ### 方法一:通过遍历字符串判断字符与空格关系 ```c #include<stdio.h> #include <string.h> int main() { char str[1000];//输入的字符串 gets(str); int len, num = 0, i; len = strlen(str);//得到长度 for (i = 0; i < len; i++) { if (str[i] != ' ' && str[i + 1] == ' ')//如果一个字符不是空格且后面是空格,则这是一个单词 num++; if (str[i] != ' ' && str[i + 1] == '\0')//如果一个字符不是空格且后面字符串结束,则这是一个单词 num++; } printf("%d\n", num); return 0; } ``` 此方法先获取输入的字符串,计算其长度,然后遍历字符串,当遇到一个空格字符且其后是空格或者字符串结束符时,单词数加 1 [^2]。 ### 方法二:逐个字符读取判断 ```c #include <stdio.h> int main() { int count = 0; char ch; ch = getchar(); while (ch != '\n') { if (ch != ' ') { ch = getchar(); if (ch == ' ' || ch == '\n') count++; continue; } else if (ch == ' ') ch = getchar(); } printf("%d", count); return 0; } ``` 该方法逐个字符读取输入,当遇到非空格字符时,再读取下一个字符,若下一个字符是空格或者换行符,则单词数加 1 [^3]。 ### 方法三:利用标志判断单词结尾 ```c #include <stdio.h> int main() { int count = 0, flag = 0; char str; str = getchar(); while (str != '\n') { if (str != ' ') //若非空格,标志为1表示单词 flag = 1; if (flag == 1 && str == ' ') //若是空格且标志为1,表示1个单词的末尾,标志重置为0 //若是空格且标志为0,表示出现连续空格 { count++; flag = 0; } str = getchar(); } //判断最后一个单词 //此时若有单词则标志一定为1,若无单词,标志停留在0 if (flag == 1) { count++; } printf("%d", count); return 0; } ``` 此方法利用一个标志 `flag` 来代表单词,当遇到非空格字符时,`flag` 置为 1,当遇到空格且 `flag` 为 1 时,单词数加 1 并将 `flag` 重置为 0,最后根据 `flag` 的值判断最后一个单词 [^4]。 ### 方法四:使用 `scanf` 读取字符 ```c #include<stdio.h> int main() { char word; int count = 0, blank = 1; while (word != '\n') { scanf("%c", &word); if (word != ' ' && blank == 1 && word != '\n') { count++; blank = 0; } if (word == ' ' && blank == 0) { blank = 1; } } printf("%d", count); return 0; } ``` 该方法使用 `scanf` 读取字符,当遇到非空格字符且 `blank` 为 1 时,单词数加 1 并将 `blank` 置为 0,当遇到空格且 `blank` 为 0 时,将 `blank` 置为 1 [^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值