C语言统计单词个数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言统计单词个数相关的知识,希望对你有一定的参考价值。

输入一段字符串,统计其中的单词个数
比如:
输入 I like ios
输出:
3

输入 this is Qian Feng College
输出:
5

Q:输入一串字符串,输出其中有多少个单词。 
Eg:Good Wishes 
A:

#include <stdio.h>#include <string.h>#define SIZE 20int main()
   char str[SIZE]='\\0';    int count=0;
printf("plz input the string\\n");
gets(str);
puts(str);    int length = strlen(str);    for (int i=0;i<length;i++)

if(str[i]!=' ')
           count++;            while(str[i]!=' '&&str[i]!='\\0')

i++;



printf("%d\\n",count);    return 0;

‘\\0’和‘0’的区别: 
在c语言中,它们都是字符,都用对应的ASCII码来存储。例如第一个ASCII码,0,对应字符为(Null),就是 ‘\\0’,即空字符。我们在c语言中判断一个字符串是否结束的标志就是看是否遇到‘\\0’,如果遇到‘\\0’,则表示字符串结束。字符‘0’和数字0的区别:前者是字符常量,后者是整形常量,但是字符常量可以像整数一样在程序中参与相关运算。

扩展资料

字符串所有字符,如果当前字符不为空,单词数+1,再嵌套一个while循环,判断当前单词是否结束。

#include <stdio.h> 

#include <string.h> 

int count_words(char* s) 


int len=strlen(s); 

int count,i;

for(i=0;i<len;i++) 

if(*(s+i)!=' ')  // 如果当前代码不为空

count++;  //单词数+1

while(*(s+i)!=' '&& i<len)  //判断当前单词是否结束

i++;

return count;

int main()

char* a="i love you";

printf("%d",count_words(a));

参考技术A

根据英语的书写习惯,在每个单词前后都会有空格分隔。 所以可以依据空格来划分单词。 

不过,由于空格可能存在连续多个,所以仅统计空格数是不可以的,需要更复杂一些的算法。 

一、算法设计:

核心思想是通过一个flag,来确定单词的起始, 每出现一个单词的起始,则表示存在一个单词。 这样统计出现的单词起始个数,即可获得单词总数。

1、flag初始为1;

2、遍历字符串。 

3、对于每个字符,如果出现非空格字符,且flag为1,则为单词起始,累加计数器。同时赋值flag为0。

4、在flag为0情况下,如果出现空格,表示上一个单词已经结束,设置flag为1。

5、 遍历结束后输出结果。

二、参考代码:

#include <stdio.h>
int main()

    char s[200];
    int i,n=0,flag=1;
    gets(s);//输入字符串。
    for(i = 0; s[i]; i ++)//遍历
    
        if(flag == 1)
        
            if(s[i] != ' ')//单词起始
            
                n++;
                flag = 0;
            
        
        else if(s[i] == ' ')//上一个单词结束。
            flag = 1;
    
    printf("%d\\n", n);//输出结果。
    return 0;

参考技术B #include "stdio.h"
main()

char s[81],c;
int i,num=0,word=0;
printf("请输入一行英文:\n");
gets(s);
for(i=0;(c=s[i])!='\0';i++)//判断句子是否到未
if(c==' ') word=0;//是空格就为0
else if(word==0)//不是空格就判断之前有没有空格

word=1;//复位用来判断空格是否存在的开关
num++;//如果之前有空格,单词数加1

printf("本行中共有%d个单词.\n",num);


其原理很简单:

对每个字符进行判断,如果是空格就把变量word标记为0,如果不是空格就判断word是不是0(即判断之前有没有空格),如果存在空格单词量加1,然后复位word变量为0。就这样重复,知道句子结束
请采纳答案,支持我一下。
参考技术C 例1. 统计一个字符串中单词的个数(假定单词之间以空格分隔)。
由于在第一个单词之前有可能没有空格符,因此若仍然采用查找一个单词的开头的方式,实现起来将会不甚方便。不过,可以变换一下思路,改为查找一个单词的末尾。
可以发现,在除了最后一个单词之外的每个单词之后至少有一个空格符,而在最后一个单词之后可能跟一个空格符,也可能直接跟一个空字符'\0',因此可以将判断规则修改为“当相邻的两个字符中,前一个是非空格字符,而后一个是空格符或空字符'\0'时,说明找到一个新的单词”。
源程序:
#include <stdio.h>
#include <string.h>
int main(void)
char a[200];
int i,n,c=0;
printf("请输入一行以空格分隔的单词:\n");
gets(a);
n=strlen(a);
for(i=0;i<=n-1;i++)
if(a[i]!=' '&&(a[i+1]==' '||a[i+1]=='\0'))
c++;
/*若第i个字符不是空格符,第i+1个字符是空格符或'\0',则表示找到一个单词的末尾*/

printf("单词个数=%d\n",c);
return 0;

例2. 统计一个字符串中单词的个数(假定单词之间以空格或标点符号分隔)。
由于单词之间是以空格符或标点符号分隔的,而标点符号是不便于一一判断区分出来的,因此可以通过判断一个字符是不是字母或数字来确定是否处于单词内部。也就是当相邻的两个字符中,前一个是字母或数字(即处于单词内部)而后一个不是字母或数字(即处于单词外部)时,说明找到一个新的单词的末尾[6]。要判断一个字符是不是字母或数字,可以直接调用C语言中的isalnum库函数。
源程序:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(void)
char a[200];
int i,n,c=0;
printf("请输入一行以空格或标点分隔的单词:\n");
gets(a);
n=strlen(a);
for(i=0;i<=n-1;i++)
if(isalnum(a[i])&&!isalnum(a[i+1]))
c++;
/*若第i个字符是字母或数字,第i+1个字符不是字母或数字,则表示一个单词结束*/

printf("单词个数=%d\n",c);
return 0;

参考资料:巨同升主编《C语言程序设计新思路》,科学出版社,2020。
参考技术D #include "stdio.h"
main()

char s[81],c;
int i,num=0,word=0;
printf("请输入一行英文:\n");
gets(s);
for(i=0;(c=s[i])!='\0';i++) /*依次读取字符,直到遇到空字符结束*/
if(c==' ') word=0; /* 若读取的字符为空则给WORD赋值0*/
else if(word==0) /* 当空格后读取字符不为空时给word赋值1并且NUM加一*/

word=1;
num++;

printf("%d\n",num);

C语言程序设计C语言统计单词个数,单词个数算法

在实际生活中经常会遇到一个问题:写英语作文时,常常要求满足一定的字数。在以往,要么我们一个一个地数;要么我们估算一行的单词数,然后用行数进行估算。

第一种方法太费时,若是长篇大论,那几乎是不可能统计的;而第二种方法不太准确。这就给我们留下了一个问题:如何又快、又准确地统计一篇英文文章中的单词数?

 

算法思想

要解决这个问题,最自然的算法是,读取文章的所有内容,然后一个单词一个单词地统计,然而,我们在这里遇到了一个难题:程序看不懂英文,如何知道什么是一个单词,什么不是一个单词呢?似乎在这里遇到了障碍,可是,如果换个角度思考问题,也许会柳暗花明又一村:文章中的单词都是用空格间隔开的,换句话说,单词数=空格数+1。

程序不认识单词,但是程序认识空格啊!这样,整个问题实际上转换成了统计文章中的空格数。

有了这样的问题转换思路,整个问题就简单多了。可以先按照这个思路自己实现,也可以直接看下面的代码实现。

 

程序代码

#include <stdio.h>

int main()



    printf("输入一行字符:\\n");

    char ch;

    int i,count=0,word=0;

    while((ch=getchar())!='\\n')

        if(ch==' ')

            word=0;

        else if(word==0)

        

            word=1;

            count++;

        

    printf("总共有 %d 个单词\\n",count);

    return 0;

 

调试运行结果

根据程序提示,分别输入“I love China”和“I love Xichang College”两个字符串代码, 程序统计单词后输出结果分别如下所示:

输入一行字符:

I Love China

总共有 3 个单词

输入一行字符:

I Love Peking University

总共有 4 个单词

 

总结

本实例展示了如何对字符数组进行操作,类型为字符型的数组称为字符数组,C 语言中没有专门的字符串变量,但是有字符数组串常量,所以字符串常量的存储是通过对字符数组的操作来完成的。

最后,不管你是转行也好,初学也罢,进阶也可,如果你想学编程~

【值得关注】我的 C/C++编程学习交流俱乐部【点击进入】

问题答疑,学习交流,技术探讨,还有超多编程资源大全,零基础的视频也超棒~

以上是关于C语言统计单词个数的主要内容,如果未能解决你的问题,请参考以下文章

c语言:输入一行字符,统计其中的单词个数,单词之间用空格分开

C语言,输入一行英文字母,统计其中有多少个单词,单词之间用空格分隔.

C语言:输入一行字符,统计其中有多少个单词,单词之间用空格分隔开

C语言输入一行字符 统计其中有多少个单词,单词之间用空格分隔开

C语言输入一行字符 统计其中有多少个单词,单词之间用空格分隔开

C语言:输入一行字符,统计其中有多少个单词,单词之间用空格分隔开