C++编程 编写函数计算一个英文句子中的单词个数

题目内容:编写函数计算一个英文句子中的单词个数。输入格式:一个最长500个字母的英文句子,不包含数字和特殊字符,但可能包含一些英文标点符号。标点符号独立出现时不视为一个单... 题目内容:
编写函数计算一个英文句子中的单词个数。
输入格式:
一个最长500个字母的英文句子,不包含数字和特殊字符,但可能包含一些英文标点符号。标点符号独立出现时不视为一个单词。
输出格式:
该句子的单词个数
展开
 我来答
czy7812
2017-07-09 · TA获得超过2670个赞
知道小有建树答主
回答量:518
采纳率:88%
帮助的人:190万
展开全部
【思路解析】
  计算英文句子中的单词个数通常有两种办法:一种是指定固定的分隔符,比如指定空格或者逗号或其它符号为分隔符,除此之外的所有字符都会被认定为单词的有效字符,比如指定空格为分隔符,则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++上运行通过,截图如下:

White_MouseYBZ
2015-04-12 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6668万
展开全部
//#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;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式