C++字符串问题:输入一任意字符串,输出串中出现的字符及其出现次数,按照首次出现顺序排列。

开头絮絮叨叨

**萌新第一次发博客(有点紧张.jpg)

     最近学数据结构时偶然出现了一道字符串问题,和往常的统计字符串出现次数以及打印统计表图不太一样。
     这道题的特殊之处在于按照顺序不重复输出字符数量,当自己敲完后在网上看到类似的代码有用C++类写的,
 不用类的反倒比较少。
     希望对C++类还不太熟悉的小伙伴们看到这篇博客能获得一些帮助。
     因为是第一次写,希望大佬们也能在评论区留下你们的意见,也希望和志同道合的小伙伴一起交流。
     支持我的也可以互相关注哦!

字符串问题:

编写程序,要求输入一任意字符串,输出串中出现的字符及其出现次数,字符输出顺序按照其在字符串中首次出现顺序排列。例如:

          输入:acbacc

          输出:a 2

                c 3

                b 1

思路:
用两个数组,一个记录先后出现的不同字符,另外一个统计字符数量,代码中有更详细的解释,有不懂的也可以在评论区提问。

#include<bits/stdc++.h>
using namespace std;

int main()
{
    
       
    cout << "请输入字符串" << endl;
    string s;
    getline(cin,s);//可以读取包括空格的一整行

    //chars[]是记录不同字符的数组
    //num[]是计数数组
    //bol用来标志有无重复字符
    int len = s.length();
    char chars[len];
    int num[len] = {
    
    0};
    int bol;

    //获取统计不同字符的数组 
    //通过依次扫描数组来实现
    for(int i=0;i<len;i ++)
    {
    
       
        bol=1;
        for(int j=0;j<i;j ++)
          {
    
    
            if(chars[j]==s[i]) 
            bol=0;//如果有已经存过的字符,会使bol改变,无法继续存储这个字符
          }
        if(bol)
          chars[i] = s[i];//存储与之前存过的不同的字符
    }
    
    //用num数组来记录各位字符的数量
    //这里的num数组在有重复字符的相应位置不会再增加计数
    //会导致这些位上的计数仍然为0
    //所以在下一步打印时不输出这些位置上的字符和数字
    for(int i=0;i<len;i ++)
    {
    
    
        for(int j=0;j<len;j ++)
          {
    
       
              if(chars[i]==s[j])
                num[i] ++;
          }
    }

    //打印结果
    for(int i=0;i<len;i ++)
      {
    
    
        if(num[i])
        cout << chars[i] << " " << num[i] << endl;
      }
    return 0;
}

输出结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46422050/article/details/105042435
今日推荐