C语言统计单词个数问题! C语言问题 统计单词个数

作者&投稿:步伊 (若有异议请与网页底部的电邮联系)

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

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

一、算法设计:

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

1、flag初始为1;

2、遍历字符串。 

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

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

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


二、参考代码:

#include <stdio.h>
int func(char *s)//计算单词数函数
{
    int i,n=0,flag=1;
    for(i = 0; s[i]; i ++)//遍历
    {
        if(flag == 1)
        {
            if(s[i] != ' ')//单词起始
            {
                n++;
                flag = 0;
            }
        }
        else if(s[i] == ' ')//上一个单词结束。
            flag = 1;
    }
    return n;//返回结果。
}
int main()
{
    char s[200];
    
    gets(s);//输入字符串。
    
    printf("%d
", func(s));//调用函数,计算并输出结果。
    return 0;
}


#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。就这样重复,知道句子结束

#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);
}

请问,这样可不可以实现功能
#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==' ')
num++;
num+=1;
//word=0;
printf("本行中共有%d个单词.\n",num);
}

#include <stdio.h>
#include <string.h>
main()
{char a[80];
int i,n,c=0;
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("c=%d\n",c);
}

c语言中统计单词个数的问题~

相当于空格,可以看一下这个程序(用于统计单词个数)
#include
void main()
{
char string[100];
int i,num=0,word=0;
char c;
printf("请输入一个英文句子:");
gets(string);
for(i=0;(c=string[i])!='\0';i++)
if(c==' ')
word=0;
else if(word==0)
{
word=1;
num++;
}

printf(" 该英文句子由%d个单词组成。 .
",num);
}
有时为了给变量附一个无意义的初值通常用这个。呵呵

#include
#include
int
main()
{

char
string[1000];
int
number=1;
printf("从键盘输入一行字符,以空格分割单词,直到按回车键结束,统计其中的单词个数
");
gets(string);
int
i=1;

while(string[i]!='\0')
{
if(string[i]=='
')
number++;
i++;
}
printf("单词个数为:%d
",number);
return
0;
}

C语言程序设计:输入一行字符,统计出其中单词的个数,个单词之间用空格分...
答:我可以告诉你一个大概思路:将输入的一行字符存入一个字符数组 buffer 中,设置一个循环变量 i,用于控制从第一个字符开始,到最后一个字符结束。再设置一个循环变量 j,用于作为当前字符是否是空格的记录。还要设置一个用于记录单词个数的变量 count = 0 ,如果当前字符不是空格,count 增加 1,如果...

c语言以键盘输入一串英文字符串,给各个单词之间以空格分开,统计其中...
答:include<stdio.h> include<stdlib.h> int main(){ char a[80];int i,len,j;printf("输入英文单词以一个空格分开");gets(a);len=strlen(a);for (i = 0; i < len; i++){ if (a[i] ==' ')j++;} printf("有%d个单词!",j);} 祝你愉快!

C语言输入一行字符 统计其中有多少个单词,单词之间用空格分隔开_百度知 ...
答:include "stdio.h"main(){ char string[81]; /*定义一个字符型数组*/ int i,num=0,word=0; /*定义几个整型常量,i用来控制循环次数,num表示单词个数,word相当于一个标志*/ char c; /*定义一个字符型变量*/ gets(string); /*获取用户输入的一句话,在这句话的末尾系统会...

C语言:从一个文件中读取英语单词,统计单词个数和每个单词出现的频率 代 ...
答:while(fscanf(fp,"%s",temp)!=EOF)//EOF即为到了文件末尾{printf("%-16s",temp);count++;}这部分 只是读入了单词并统计了总数 实际上存在temp里面的之后最后一个 之前的都被覆盖了 下面的所有处理 都是针对最后一个单词以及一个空的str做的 本质上没什么意义 两种做法 1, 读取单词 并顺序存在...

输入一句英文 用C语言统计 单词的个数 这个程序我写出来了 可是怎么弄...
答:程序的问题出在:scanf输入字符串时,当遇到空格就返回了,因此str1中只保存了第一个单词 。将scanf改为gets即可。即 scanf("%s", str);改为gets(str); 就OK了。

c语言编程实现统计字符串中英文单词的个数。并按出现频次升序排序显示每 ...
答:include <stdio.h> include <string.h> include <stdlib.h> /*定义结构体word内存放单词和个数*/ typedef struct { char *str1[20];int strC;}WordAndCnt;//定义total函数计算总的单词个数 void total(char* str,WordAndCnt* wac){ //int sum=0,i;int i,j;wac->strC=0;for(i=0,...

C语言编程题求教---输入一个字符 统计其中的单词个数
答:谭浩强C语言书上的例题,虽然那道题目是用数组做的,但是思路还是可以借鉴的。设置一个标志word,表示单词是否开始。如果一直是空格的话,word=0,一旦看到不是空格,并且word是0,则意味着一个新单词开始,将个数增1并将word置为1。include <stdio.h> main(){ char c;int i,num=0,word=0;...

C语言:从键盘输入英文文本,统计总共有多少个单词。要求如下,咋编...
答:代码文本:include "stdio.h"int main(int argc,char *argv[]){ char s[25];int w;printf("Please enter a text...\n");w=0;while(scanf("%24s",s)==1 && *s!='#' && s[1]!='#')if(*s>='a' && *s<='z' || *s>='A' && *s<='Z')w++;printf("A total of...

C语言 统计文件中各个单词的个数
答:for(j=0;j<k;j++) /*k为s2中的单词个数*/ { if(strcmp(s3,s2[j])==0){ flag1=1; /*有重复单词*/ a[j]++;break;} } if(flag1==0) /*如果单词不重复*/ { strcpy(s2[k],s3); /*修改处*/ a[k]++;k++;} } if(flag2==1) /*如果遇到空白字符,则...

C语言题目: 输入一行字符,统计其中有多少个单词
答:printf("字符的个数dao为:%d\n",sum);} 表达:字符是可使用多种不同字符方案或代码页来表示的抽象实体。例如,Unicode UTF-16 编码将字符表示为16位整数序列,而 Unicode UTF-8 编码则将相同的字符表示为 8 位字节序列,微软的公共语言运行库使用 Unicode UTF-16(Unicode 转换格式,16 位编码...