// a11b2bac3bad3abcd2 输入
//bbabcdabcdbacbacbacbadbadbadaaaaaaaaaaa 输出
//bbabcdabcdbacbacbacbadbadbadaaaaaaaaaaa
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int isNum(char c)
{
if(c >='1' && c <= '9')
{
return 1;
}
return 0;
}
int isChar(char c)
{
if(c >='a' && c <= 'z' || c >='A' && c <= 'B')
{
return 1;
}
return 0;
}
struct StrList
{
int num;
char str[255];
/* data */
};
int sortByStr(struct StrList *detail,int strLen)
{
struct StrList tmpDetail;
for (int t = 0; t < strLen; t++)
{
for (int i = 0; i < 255; i++)
{
if(detail[i].num && strlen(detail[i].str)){
for (int j = 0;j < 255 -i - 1; j++)
{
if(detail[j].num && strlen(detail[j].str)){
if(detail[j].str[t] > detail[j+1].str[t]){
tmpDetail = detail[j];
detail[j] = detail[j+1];
detail[j+1] = tmpDetail;
}
}
/* code */
}
}
}
}
}
int main()
{
char a[1000];
char b;
scanf("%s",a);
struct StrList detail[255]={};
int numCount = 0;
int strCount = 0;
char tmpStr[255] = {0};
for (int i,j = 0; i < strlen(a); i++)
{
char *p = a + i;
if(isNum(a[i])){
numCount = 0;
char tmpNumStr[255] = {0};
while (isNum(*p))
{
numCount++;
p++;
}
i+=(numCount-1);
strncpy(tmpNumStr,p-numCount,numCount);
// printf("tmpNumStr = %s\n",tmpNumStr);
detail[j].num = atoi(tmpNumStr);
memccpy(detail[j].str,tmpStr,0,sizeof(tmpStr));
j++;
}else{
strCount= 0;
while (isChar(*p))
{
strCount++;
p++;
//i++;
}
i+=(strCount-1);
memset(tmpStr,0,sizeof(tmpStr));
strncpy(tmpStr,p-strCount,strCount);
//printf("tmpStr = %s\n",tmpStr);
}
}
char dest[1000] = {};
struct StrList tmpDetail;
for (int i = 0; i < 255; i++)
{
if(detail[i].num && strlen(detail[i].str)){
for (int j = 0;j < 255 -i - 1; j++)
{
if(detail[j].num && strlen(detail[j].str)){
//printf("num = %d,str = %s\n",detail[j].num,detail[j].str);
// printf("i num = %d,j num = %d\n",detail[i].num,detail[j].num);
if(detail[j].num > detail[j+1].num){
tmpDetail = detail[j];
detail[j] = detail[j+1];
detail[j+1] = tmpDetail;
}
if(strlen(detail[j].str) == strlen(detail[j+1].str)
&&detail[j].str > detail[j+1].str){
tmpDetail = detail[j];
detail[j] = detail[j+1];
detail[j+1] = tmpDetail;
}
}
/* code */
}
}
}
for (int i = 0; i < 255; i++)
{
if(detail[i].num && strlen(detail[i].str)){
printf("end num = %d,str = %s\n",detail[i].num,detail[i].str);
for (int j = 0; j < detail[i].num; j++)
{
strcat(dest,detail[i].str);
}
}
}
printf("%s\n",dest);
return 0;
}
因篇幅问题不能全部显示,请点此查看更多更全内容