zoukankan      html  css  js  c++  java
  • 计算字符个数

    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()

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

    //仅适用于字母输入,了解即可不推荐
    #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=='
    ')
            //如果是换行,则持续检查输入字符,因为换行是不作为一个字符处理的
                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=='
    ') 
            	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; 
    }
    

      

  • 相关阅读:
    uu 模块
    程序员都是好男人
    TCP基础知识
    最全 git 命令总结
    iOS 添加UIWindow不显示问题解决
    解决CFBundleIdentifier", Does Not Exist
    Mac 系统OS X>=10.9,怎么把默认的python切换成3.7或者更高
    OC算法练习-Hash算法
    设计模式架构模式
    runtime相关知识
  • 原文地址:https://www.cnblogs.com/yedushusheng/p/5519188.html
Copyright © 2011-2022 走看看