• 计算字符串个数


    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==' ') //如果是换行,则持续检查输入字符,因为换行是不作为一个字符处理的 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=='
    ')
    			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=='
    ')
    			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;
    }
    

      

      

  • 相关阅读:
    Visual studio 2008中添加manifest文件
    SqlServer2008R2安装
    今天在Google上搜我的名字,具然埔客园排在第一位。
    今天又到此一游,原因,是为了寻找传说中的Team foundation server,很难找呀,这个东东。
    硬件基础知识
    循环冗余检验应用
    【转】网络变压器的作用
    PADS无模命令总结
    单片机后缀说明
    QuartusII之Warning警告分析
  • 原文地址:https://www.cnblogs.com/yedushusheng/p/5520262.html
Copyright © 2020-2023  润新知