計算字符個數

一、題目描述

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