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;
}

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

  • 14
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

斯凯尔8848

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值