源代码:
/*(文件注释头部开始)
*程序的版权和版本声明部分
*Copyright (c) 2011,烟台大学计算机学院学生
*All rights reserved.
*文件名称:字符串中单词个数的统计
*作 者:2011级计114-3张宗佳
*完成日期:2011年3月3号
*版本号:vc.3
* 对任务及求解方法的描述部分
* 输入描术:输入一行字符串
* 问题描述: 每两个单词之间以空格(可能多个)隔开,
*或由标点符号(只考虑,.;?!5种)隔开。如输入:
*how old are you? I am 20.输出:there are 7 words in the line.
* 程序输出:输出单词的个数
* 程序头部的注释结束
*/
#include<iostream>
using namespace std;
int main()
{
char str[81];//一行可以输入80个字符,所以定义次数组内有81个字符
int i = 0, num = 0;
bool isword = false;
gets(str);//这里不cin,如果用cin的话,输入的字符串,遇到空格就会结束
while(str[i]!='\0')//'\0'是字符串结束的标志,当str[i] = '\0'时,循环体结束
{
if(str[i] == ' ')//如果字符是空格,就不是单词
{
isword = false;
}
else if(isword == false)//否则,如果前一个字符不是单词,那么从空格之后的第一个字符开始时一个单词
{
isword = true;
++num;//字符的个数累加
}
++i;
}
cout << "There are " << num << " words in the line" << endl;
return 0;
}
实验结果:
经验积累:
1.如果要输出一行字符串,可以用gets(...)输入,如果用cin,当遇到空格时会结束
上级感言:
上学期做过一个类似的程序,只不过,每个单词之间只有一个空格,这样比较简单一些,可是当两个单词之间由若干个空格的时候,就不能再那么做了,就像老师讲的,可以定义一个布尔型变量,当前字符是空格时,就不是单词,如果当前字符不是空格,前一个字符是空格,就开始计算单词的个数,可是,如果当标点符号语单词之间有空格时,也会算作一个单词,所以,偶又改了一点点...
#include<iostream>
using namespace std;
int main()
{
char str[81];//一行可以输入80个字符,所以定义次数组内有81个字符
int i = 0, num = 0;
bool isword = false;
gets(str);//这里不cin,如果用cin的话,输入的字符串,遇到空格就会结束
while(str[i]!='\0')//'\0'是字符串结束的标志,当str[i] = '\0'时,循环体结束
{
if(str[i] == ' ' || str[i] == '?' || str[i] == '.' || str[i] == ',' || str[i] == ';' || str[i] == '!')//如果字符是空格或标点,就不是单词
{
isword = false;
}
else if(isword == false)//否则,如果前一个字符不是单词,那么从空格之后的第一个字符开始时一个单词
{
isword = true;
++num;//字符的个数累加
}
++i;
}
cout << "There are " << num << " words in the line" << endl;
return 0;
}
![](http://hi.csdn.net/attachment/201203/3/0_1330741090WKkc.gif)