c语言统计单词个数

#include<stdio.h>
#include<string.h>
#define N 80
int decede(char str[])
{
int i,word=0,num=0;
for(i=0;str[i]!='\0';i++)
{
if(str[i]==32)
word=0;
else if(word==0)
{
word=1;
num++;
}
}
return num;
}
int main()
{
char str[N],num;
printf("please input string:");
gets(str);
num=decede(str);
printf("一共有%d个单词\n",num);

}
原理是判断有一个空格就有一个单词输入一个单词how没有空格字符时如何判断有一个单词的?

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

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

一、算法设计:

核心思想是通过一个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;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-07-14
#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);
}
第2个回答  2018-01-03
#include
#include
int main()
{
char a[80];
int i,num=0;
gets(a);
for(i=0;a[i]!='\0';i++) //这里应该检查到串尾,字符串结束符是'\0'
{
if ( (a[i] >='a' && a[i] ='A' && a[i] <='Z') ) //如果是字母,则一直找到非字母(分隔符:符号,空格等)
{
do {
i++ ;
} while ( (a[i] >='a' && a[i] ='A' && a[i] <='Z') );
//记录一个单词
num++;
}
}
printf("%d\n",num);
return 0;
}本回答被提问者采纳
第3个回答  2019-11-18
#include<stdio.h>
#include<string.h>
int
main()
{

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

while(string[i]!='\0')
{
if(string[i]=='
')
number++;
i++;
}
printf("单词个数为:%d\n",number);
return
0;
}
第4个回答  2018-01-03
int decede(char str[])
{
int i,word=0,num=0,first = 1;
for(i=0; str[i]!='\0'; i++)
{
//如果是字母,则一直找到非字母(分隔符:符号,空格等)
if((str[i]>='a' && str[i]<='z') || (astr>='A' && str[i]<='Z'))
{
do{
i++;
} while((str[i]>='a' && str[i]<='z')||(str[i]>='A'&&str[i]<='Z'));
//记录一个单词
num++;
}
}
return num;
}
第5个回答  2019-07-14
#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);
}
第6个回答  2018-01-03
#include
#include
int main()
{
char a[80];
int i,num=0;
gets(a);
for(i=0;a[i]!='\0';i++) //这里应该检查到串尾,字符串结束符是'\0'
{
if ( (a[i] >='a' && a[i] ='A' && a[i] <='Z') ) //如果是字母,则一直找到非字母(分隔符:符号,空格等)
{
do {
i++ ;
} while ( (a[i] >='a' && a[i] ='A' && a[i] <='Z') );
//记录一个单词
num++;
}
}
printf("%d\n",num);
return 0;
}本回答被提问者采纳
第7个回答  2019-11-18
#include<stdio.h>
#include<string.h>
int
main()
{

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

while(string[i]!='\0')
{
if(string[i]=='
')
number++;
i++;
}
printf("单词个数为:%d\n",number);
return
0;
}
第8个回答  2018-01-03
int decede(char str[])
{
int i,word=0,num=0,first = 1;
for(i=0; str[i]!='\0'; i++)
{
//如果是字母,则一直找到非字母(分隔符:符号,空格等)
if((str[i]>='a' && str[i]<='z') || (astr>='A' && str[i]<='Z'))
{
do{
i++;
} while((str[i]>='a' && str[i]<='z')||(str[i]>='A'&&str[i]<='Z'));
//记录一个单词
num++;
}
}
return num;
}
相似回答
大家正在搜