问题
用户输入一段文本(英文),统计其字符总个数,
大写字母个数、小写字母个数、数字个数及其他字
符个数。
运行结果
C++ Programming
字符串总长度:15
大写字母:2
小写字母:10
数字个数:0
其他字符:3
问题分析
①输入字符串。
cin >> <字符数组名>
, 只能输入单词;
因为“>>”以空格、tab键、回车为分隔符,遇到空格认为是一项数据
的结束。
cin
是输入流对象,它有一个成员函数getline()可以读取带空格的一
行字符串。基本使格式为:cin.getline(<字符数组名>,<字符长度>)
;
例如:
char sentence[100]; //字符数组大小100
cin.getline(sentence,99); //可以输入最长99(回车结束)的字符串,中间可以有空格。
②统计计数。
输入的文本看做字符串,统计字符个数,就是从字
符串的第1个字符开始,逐个计数,直到结束。
注意,在C++中,字符串的结束是 ’\0’。统计各类字符个
数只要在逐个计数的过程中再对各类字符计数。
计数就是逐个数,用一个变量表示,每遇到一个字符,该
变量增加1。
算法描述
设字符串用str[100]表示,str[i]表示第i+1个字符(从1开始)。
用len表示字符串长度,capital表示大写字母个数,smallletter
表示小写字母个数,digit表示数字个数,others表示其他字母个数,
初始时它们的值均为0。
① 输入字符串;
② i=0;
③如果str[i]=’\0’,转⑥;否则执行④;
④ len=len+1
如果str[i]为大写字母
capital++;
否则
如果str[i]为小写写字母
smallletter++;
否则
如果str[i]为数字
digit++;
否则
others++
⑤i=i+1,转③;
⑥输出统计数据。
是否为大写、小写或数字,需要比较字符的ASCII值所在的区间。
源程序
作用:统计字符串中字符种类的个数
#include<iostream>
using namespace std;
int main()
{
const int N = 101;
char s[N];
cin.getline(s, N);
int len=0,capital=0,smallletter=0,digit=0,others=0;
int i;
while(str[i] != '\0')
{
len++;
if(str[i]<='Z' && str[i]>='A')
{
capital++; // 大写字母
}
else if(str[i]<='z' && str[i]>='a')
{
smallletter++; // 小写字母
}
else if(str[i) <= '9' && str[i] >= '0')
{
digit++;
}
else
{
others++; // 其它字符
}
i++;
}
cout<<"字符串总长度:"<<len<<endl;
cout<<" 大写字母:"<<capital<<endl;
cout<<" 小写字母:"<<smallletter<<endl;
cout<<" 数字个数:"<<digit<<endl;
cout<<" 其他字符:"<<others<<endl;
return 0;
}
总结
当<else块>只有一条if语句时,可以这样写,基本格式是:
if (<条件1>)
{ ... }
else if (<条件2>)
{ ... }
else if (<条件3>)
...
else
{...}
注意,每一个else是前面最近的if的else,而不是第一个if的else,离得最近的if。