1、题目描述
写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。
输入描述:
输入一个有字母和数字以及空格组成的字符串,和一个字符。
输出描述:
输出输入字符串中含有该字符的个数。
输入例子:
输出例子:
2、代码
方案一
基本思路:定义String、Char变量--通过getline、cin输入变量--遍历String数组进行比较--输出count。
说明:单一字符的输入方法:cin和scanf(),字符串的输入方法getline()。
拓展:
一个偶然发现的错误,代码如下:
int count; cout<<count<<endl; for(int i=0;i<inputString.length();++i){ if(inputString[i]==inputChar) count++; } cout<<count<<endl;
输出结果:
注意:这里我们定义了int变量,但是未进行初始化,也就是说它的值是随机分配的,我们输出的结果自然也是不确定的,这个错误一定要引起重视。
我们也可以采用数组进行统计字符个数:
方案二
基本思路:借助map容器存储--寻找相等的key--value加1--输出value
//适合任意类型的字符串 #include<iostream> #include<stdio.h> //必须引入这个头文件,否则getchar()会报错 #include<string> #include<map> using namespace std; int main(){ map<char,int>inputString; char inputChar; while(inputChar=getchar()){ if(inputChar==' ') break; else{ inputString[inputChar]++; } } int count=0; cin>>inputChar; if(inputChar>='A' && inputChar<='Z'){ count=inputString[inputChar]+inputString[inputChar+32]; } //如果是大写字母,则加上32求得小写字母的数目,输出二者之和,大小写字母ASCII码相差32,且小写字母数值大
if(inputChar>='a' && inputChar<='z'){
count=inputString[inputChar]+inputString[inputChar-32];
} //这里把大小写字符当做一个来处理
cout<<count; return 0; }
注意:上述代码可以实现大小写字母的相同处理方式,但是对于非字母变量未做处理,存在欠缺。
作如下改进:
//适合任意类型的字符串 #include<iostream> #include<stdio.h> //必须引入这个头文件,否则getchar()会报错 #include<string> #include<map> using namespace std; int main(){ map<char,int>inputString; char inputChar; while(inputChar=getchar()){ if(inputChar==' ') break; else{ inputString[inputChar]++; } } int count=0; cin>>inputChar; if(inputChar>='A' && inputChar<='Z'){ count=inputString[inputChar]+inputString[inputChar+32]; } else if(inputChar>='a' && inputChar<='z'){ count=inputString[inputChar]+inputString[inputChar-32]; } else{ count=inputString[inputChar]; } cout<<count; return 0; }