计算字符串个数

Posted 野渡书生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算字符串个数相关的知识,希望对你有一定的参考价值。

1、题目描述

写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。

输入描述:

输入一个有字母和数字以及空格组成的字符串,和一个字符。

输出描述:

输出输入字符串中含有该字符的个数。

输入例子:

ABCDEF
A

输出例子:

1

2、代码

方案一

基本思路:定义String、Char变量--通过getline、cin输入变量--遍历String数组进行比较--输出count。

//适合任何字符输入
#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()

拓展:

一个偶然发现的错误,代码如下:

 

int count;
cout<<count<<endl;
for(int i=0;i<inputString.length();++i){
if(inputString[i]==inputChar)
count++;	
}
cout<<count<<endl;  

输出结果:

注意:这里我们定义了int变量,但是未进行初始化,也就是说它的值是随机分配的,我们输出的结果自然也是不确定的,这个错误一定要引起重视。

 

 

我们也可以采用数组进行统计字符个数:

//仅适用于字母输入,了解即可不推荐
#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函数的功能是从键盘上缓冲区获取一个字符,键盘缓冲区的字符通过cin输入,这里是将输入的字符绑定到变量inputChar上
  //while循环的作用是持续不断获取来自键盘的输入字符,直到输入换行 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<stdio.h>
//必须引入这个头文件,否则getchar()会报错
#include<string>
#include<map>

using namespace std;

int main(){
	map<char,int>inputString;
	char inputChar;
	while(inputChar=getchar()){
		if(inputChar==\'\\n\')
			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==\'\\n\')
			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;
}

 

  

 

  

以上是关于计算字符串个数的主要内容,如果未能解决你的问题,请参考以下文章

计算字符个数

1-2计算字符个数

华为机试 计算字符个数

计算字符串个数

华为笔试:计算字符个数

华为python机试题目:计算字符个数简单错误记录简单密码进制转换句子逆序密码验证合格程序