题目描述
输入一串小写字母(以"."为结束标志),统计出每个字母在该字符串中出现的次数(若某字母不出现,则不要输出)。
输入
输入只有一行,包括若干个字符。
输出
输出只有两行,第一行为出现的小写字母,第二行为字母的出现次数。
样例
输入
abdceeef.
输出
abcdef
111131
参考代码:
第一次尝试用两个字符串数组,但是把数组强制转换为字符,出错。
并且第一次题目没有仔细阅读,漏排序了
#include <bits/stdc++.h>
using namespace std;
int N=200;
int main()
{
string a;
string s1="",s2="";
char c[26]={0};
cin>>a;
for(char c='a';c<='z';c++)
{
int num=0;
for(int i=0;i<a.length();i++)
{
if(c==a[i])
num++;
}
if(num!=0)
{
s1+=c;
s2+=to_string(num);
}
}
cout<<s1<<endl<<s2;
return 0;
}
于是采取第二种方法:
重难点:个数数组的下标,要用一个新的变量x来计算,这个变量数值的变化要注意。
#include <bits/stdc++.h>
#include <algorithm>
using namespace std;
int N=200;
int main()
{
string a;
string s1="";
int n[26]={0},x=0;
char c[26]={0};
cin>>a;
for(int i=0;i<a.length();i++)
{
for(int j=1;j<a.length()-1;j++)
if(a[j]>a[j+1]) swap(a[j],a[j+1]);
}
for(char c='a';c<='z';c++)
{
int num=0;
for(int i=0;i<a.length();i++)
{
if(a[i]==c)
num++;
}
if(num!=0)
{
s1+=c;
n[x]=num;
x++;
}
}
cout<<s1<<endl;
for(int i=0;i<x;i++) cout<<n[i];
return 0;
}