C++编程 编写函数计算一个英文句子中的单词个数
题目内容:编写函数计算一个英文句子中的单词个数。输入格式:一个最长500个字母的英文句子,不包含数字和特殊字符,但可能包含一些英文标点符号。标点符号独立出现时不视为一个单...
题目内容:
编写函数计算一个英文句子中的单词个数。
输入格式:
一个最长500个字母的英文句子,不包含数字和特殊字符,但可能包含一些英文标点符号。标点符号独立出现时不视为一个单词。
输出格式:
该句子的单词个数 展开
编写函数计算一个英文句子中的单词个数。
输入格式:
一个最长500个字母的英文句子,不包含数字和特殊字符,但可能包含一些英文标点符号。标点符号独立出现时不视为一个单词。
输出格式:
该句子的单词个数 展开
2个回答
展开全部
【思路解析】
计算英文句子中的单词个数通常有两种办法:一种是指定固定的分隔符,比如指定空格或者逗号或其它符号为分隔符,除此之外的所有字符都会被认定为单词的有效字符,比如指定空格为分隔符,则I love her(rose).这个句子中只有3个单词,因为her(rose)之间没有空隔隔开,会被认为是一个单词。另一种是只承认字母为单词的有效字符,除此之外的所有字符都会被认定为分隔符。比如同样是上面的句子,用第二种办法就会统计出4个单词,因为her和rose之间被一个括号隔开,会被认为是两个单词。但是不管是哪一种,其实在编程上思路都是一样的。
统计一个字符串中单词的个数,最关键的问题是如何使有效字符不重复统计。比如碰到love这个单词,检测到l是一个有效字符,单词个数增加1,但紧接着是o也是有效字符,但单词的个数就不能再增加1,否则就会造成重复统计。这可以用一个while语句来实现跳过。整体的思路是这样的:
对字符串中所有的字符一个个检测,直到字符串结束为止,如果碰到有效字符,单词个数增加1,然后用while语句跳过所有有效字符,不断重复这个过程就可以统计出单词的个数。
下面给出两种不同方法的代码,分别写成一个独立的函数,具体如下:
【程序代码】
#include <iostream> //控制台操作头文件
#include <string.h> //字符串操作头文件
//---------------
int WordCount(char S[],char a) //统计单词个数函数(a是分隔符)
{int i=0,n=0; //循环变量和单词个数
while(S[i]!='\0') //逐个检测串里的字符
{if(S[i]!=a&&S[i]!='\0') //如果碰到有效字符
{n++; //单词个数加1
while(S[i]!=a&&S[i]!='\0') i++;}//跳过后面一起的有效字符
else i++;} //如果没碰到有效字符检测下一个
return n;} //函数返回单词个数
/*如果指定了固定分隔符,那就是除了分隔符和结束符其它都是有效字符*/
//---------------
int WordCount1(char S[]) //统计单词个数函数(不指定分隔符)
{int i=0,n=0; //循环变量和单词个数
while(S[i]!='\0') //逐个检测串里的字符
{if((S[i]>='a'&&S[i]<='z')||(S[i]>='A'&&S[i]<='Z'))
/*只承认a-z或者A-Z之间的字符为单词的有效字符*/
{n++; //单词个数加1
while((S[i]>='a'&&S[i]<='z')||(S[i]>='A'&&S[i]<='Z'))
i++;} //跳过后面连在一起的所有有效字符
else i++;} //如果没碰到有效字符检测下一个
return n;} //函数返回单词个数
//---------------
int main() //主函数
{int n; //单词数
char chr[255]; //英文句子字符串
for(;;) //设置一个无穷循环
{printf("请输入英文句子(END结束):");//输入提示
gets(chr); //接收一个英文句子
/*因为句子中可能含有空格,所以要用gets函数不能用scanf函数*/
if(strcmp(chr,"END")==0) break; //输入END退出循环结束函数
n=WordCount(chr,' '); //获得单词数(空格分隔符)
printf("以空隔分共有%d个单词\n",n);//输出单词个数
n=WordCount1(chr); //获得单词数(不指定分隔符)
printf("以字母分共有%d个单词\n\n",n);}//输出单词个数
printf("\n"); //换行
system("PAUSE"); //暂停屏幕查看结果
return 0;} //结束程序
【运行结果】
以上代码在DEV C++上运行通过,截图如下:
展开全部
//#include "stdafx.h"//vc++6.0加上这一行.
#include <iostream>
using namespace std;
int main(void){
int i,ws;
char w[501]=" The quick brown fox jumps over a lazy dog. This is a sentence in a book called \'Q\'.";
for(ws=i=0;w[i];i++)
if(isalpha(w[i]) && (i==0 || !isalpha(w[i-1])))
ws++;
cout << "The result is " << ws << endl;
return 0;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询