题目要求:给定一个字符串,统计连续字符出现的次数,并对其排序输出。
例如:输入"aabbccAAA",输出"A3a2b2c2";
我所采用的方法是先对整个字符串统计连续相同的字符出现的次数,将其存入数组,然后对数组中的字符进行排序,并将
排序后的字符和对应的出现的次数存入输出数组中。
下面是参考代码:
#include<iostream>
#include <string>
using namespace std;
void zipsort(char *str,int len,char *res);
int quick(char *str,int len);
int main()
{
char p1[]="aabbcccAAA";
int len=strlen(p1);
char p2[50]="";
zipsort(p1,len,p2);
return 0;
}
void zipsort(char *str,int len,char *res)
{
if (str==NULL || len<=0)
{
return;
}
int cnt=1;
char *p1=str;
char p2[50]="";
int i=0,j=0;
//找到相同字符出现的次数,并将字符和其出现次数一并存入数组
cout <<"p2:\n";
while(i<len)
{
if (p1[i]==p1[i+1])
{
cnt++;
i++;
}
else
{
p2[j]=p1[i];
// cout <<p2[j];
j++;
p2[j]=cnt+'0';
// cout <<p2[j];
j++;
cnt=1;
i++;
}
}
p2[j]='\0';
for (i=0;i<j;i++)
{
cout<<p2[i];
}
//找出上面数组中存入的字符,并对其进行排序
i=0;
char p3[50]="";
int k=0;
cout <<"\np3:\n";
while(i<j)
{
if(i%2==0) //i为偶数
{
p3[k]=p2[i];
// cout <<p3[k];
i+=2;
k++;
}
/*
else
i++;*/
}
p3[k]='\0';
for(i=0;i<k;i++)
{
cout <<p3[i];
}
cout <<"\nnew sort p3:\n";
int l=0;
for (i=0;i<k-1;i++)
{
for (l=i+1;l<k;l++)
{
if (p3[l]<p3[i])
{
char s=p3[i];
p3[i]=p3[l];
p3[l]=s;
}
}
}
for(i=0;i<k;i++)
cout <<p3[i];
/*
cout <<"\np2:\n";
for (i=0;i<j;i++)
{
cout<<p2[i];
}
*/
cout <<"\nresult:\n";
int n=0,m=0;
for (i=0;i<k;i++)
{
while(n<j && m<j)
{
if(p3[i]==p2[m])
{
res[n]=p2[m];
//cout<<res[n];
n++;
res[n]=p2[m+1];
//cout<<res[n];
n++;
m=0;
break;
}
else
m++;
}
}
res[n]='\0';
for (i=0;i<j;i++)
{
cout<<res[i];
}
cout <<endl;
}