C语言,一道麻烦题
/*照相(20分)
题目内容:
总有些字符串中,存在一些重复出现的字符,请将每一个字符串中重复出现的最后一个字符替换成相应的重复数。
例如,在aaa字符串中,a重复了3次,那么就将最后一个a替换为3,即aa3
只出现1次的,当然就不用处理了,因为没有出现重复次数嘛
我们这里的字符串,在变换后长度也不会超过100的
输入样例
aaa
输出样例
aa3
输入样例:
abc
输出样例:
abc
咱就是说我期末考试白扔20分,考试后改了几个数据就能行。
思路:记录各种字母出现的次数,在最后一次用itoa把它的次数转化成字符串录入
我错在了把结构体中几个变量搞混了,结果大失败。
修正后:
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
typedef struct
{
char x;
int y;
int z=1;
}st;
int main()
{
st fen[1000];int cou=0;
char a[100000];
scanf("%s",a);
int len=strlen(a);
fen[cou++].x=a[0];
fen[cou-1].y=1;
for(int i=1;i<len;i++)
{ int flag=0;
for(int j=0;j<cou;j++)
{
if(a[i]==fen[j].x)
{
fen[j].y++;flag=1;
break;
}
}
if(flag==0)
{
fen[cou].x=a[i];
fen[cou++].y++;
}
}
char ne[100000];int cv=0;
for(int i=0;i<len;i++)
{ int uu=0;
for(int j=0;j<cou;j++)
{
if(a[i]==fen[j].x )////////////
{
if(fen[j].y==1)
{
ne[cv++]=a[i]; uu=1;
break;
}
else if(fen[j].y!=fen[j].z )
{
ne[cv++]=a[i]; uu=2;
fen[j].z++;break;
}
else
{
if(fen[j].y%100==1)
{
strcat(ne,"100");cv++;cv++;cv++; uu=3;break;
}
else
{ char str[3];
itoa(fen[j].y,str,10);
if(fen[j].y>=10)
{
strcat(ne,str);cv++;cv++; uu=4;break;
}
else
{
strcat(ne,str);cv++; uu=5;break;
}
}
}
}
}
}
ne[cv]='\0';
printf("%s",ne);
}
本学期首寄

看我多拉贡dangsi


