寫出一個程序,接受一個有字母和數字以及空格組成的字符串,和一個字符,而後輸出輸入字符串中含有該字符的個數。不區分大小寫。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; }