计算字符个数

一、题目描述

写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,而后输出输入字符串中含有该字符的个数。不区分大小写。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; 
}
相关文章
相关标签/搜索