开头絮絮叨叨
**萌新第一次发博客(有点紧张.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;
}
输出结果: