写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,而后输出输入字符串中含有该字符的个数。不区分大小写。ios
输入描述:数组
输入一个有字母和数字以及空格组成的字符串,和一个字符。函数
输出描述:spa
输出输入字符串中含有该字符的个数。code
输入例子:
ci
ABCDEF A
输出例子:
字符串
1
基本思路:定义String、Char变量--经过getline、cin输入变量--遍历String数组进行比较--输出count。
get
//适合任何字符输入 #include<iostream> #include<string> using namespace std; int main(){ string inputString; char inputChar; getline(cin,inputString); //getline从标准输入设备上读入字符,而后返回给输入流cin,这里是将数据绑定到变量inputString上面 cin>>inputChar; //scanf("%c",&inputChar); //以上是两种输入的方式:cin和scanf() int count=0; for(int i=0;i<inputString.length();++i){ //for(int i=0;i<inputString.length();i++) if(inputString[i]==inputChar) count++; } cout<<count<<endl; return 0; }
说明:单一字符的输入方法:cin和scanf(),字符串的输入方法getline()。input
咱们也能够采用数组进行统计字符个数:string
//仅适用于字母输入,了解便可不推荐 #include "stdafx.h" #include <stdio.h> #include <math.h> #include <iostream> #include <String> using namespace std; int main() { int charNum[26]; for(int i =0; i<26; i++) { charNum[i] = 0; } string str; cout<<"please input a string : "<<endl; getline(cin,str); int strLen = str.length(); for(int i=0; i < strLen; i++) { char s = str.at(i); if(s >= 'A' && s <= 'Z') { int n = s - 'A'; charNum[n]++; } else if( s >= 'a' && s <= 'z') { int n = s - 'a'; charNum[n]++; } } for(int i = 0; i< 26; i++) { char char_A = 'A' + i; cout<<" the num of the char :"<<char_A<<" = "<<charNum[i]<<endl; } system("pause"); return 0; }
基本思路:借助map容器存储--寻找相等的key--value加1--输出value
//依据下面操做进行改进便可: #include <iostream> #include <map> #include <stdio.h> using namespace std; int main(){ map<char,int>inputString; //这里的输入String做为单一的char类型进行存储 char inputChar; while ((inputChar=getchar())) { //getchar函数的功能是从键盘上输入一个字符,这里是将输入的字符绑定到变量inputChar上 if(inputChar=='\n') //若是是换行,则持续检查输入字符,由于换行是不做为一个字符处理的 break; //一开始输入的时候没有换行,先执行else的语句,即把map初始化,而后换行输入待比较的字符,即执行break跳出这个while else inputString[inputChar]++; //若是对应的key,即char字符相等,则value加1 //这里其实就是对map进行初始化 } //以上是经过inputChar对inputString Map赋值 cin>>inputChar; //这里输入的是字符,而不是字符串 cout<<inputString[inputChar]<<endl; //这里不能区分大小写字母,即a与A做为两个字符处理,须要改进 return 0; }
以上程序未区分大小写,做以下改进:
//适合任意类型的字符串 #include <iostream> #include <map> #include <stdio.h> //必须引入这个头文件,不然getchar()会报错 using namespace std; int main() { map<char,int>words; char ch; while ((ch=getchar())) { if(ch=='\n') break; else words[ch]++; } cin>>ch; if((ch>='a')&&(ch<='z')) { cout<<words[ch]+words[ch-32]<<endl; //若是是小写字母,则减去32求得大写字母的数目,输出两者之和,大小写字母ASCII码相差32,且小写字母数值大 } else if ((ch>='A')&&(ch<='Z')) { cout<<words[ch]+words[ch+32]<<endl; } //这里把大小写字符当作一个来处理 else cout<<words[ch]<<endl; //若是不是字母输入,一样能够输出,这样使得该程序能够适应各类数据类型的字符串 return 0; }