#include
#include
int main()
{
char input[128];
while(~scanf("%s",input))
{
char output[128];
memset(output,'\0',sizeof(output));
int p=0;
char now=input[p];
int count=0;
while(input[p]!='\0')
{
while(input[p]==now)
{
p++;
count++;
}
char tmp[2],tmp2[128];
tmp[0]=now;
tmp[1]='\0';
sprintf(tmp2,"%d",count);
strcat(tmp2,tmp);
strcat(output,tmp2);
now=input[p];
count=0;
}
printf("%s\n",output);
}
return 0;
}
不会阿阿阿阿阿为什么
同学写的1 参考
#include
int main()
{
int i;
char temp;
char sum[26] = { 0 };
for (i = 0; i < 100; i++)
{
temp = getchar();
if (temp != '\n')
{
if ((temp >= 'a' && temp <= 'z') || (temp >= 'A' && temp <= 'Z'))
{
switch (temp)
{
case 'a':case 'A':sum[0]++; break;
case 'b':case 'B':sum[1]++; break;
case 'c':case 'C':sum[2]++; break;
case 'd':case 'D':sum[3]++; break;
case 'e':case 'E':sum[4]++; break;
case 'f':case 'F':sum[5]++; break;
case 'g':case 'G':sum[6]++; break;
case 'h':case 'H':sum[7]++; break;
case 'i':case 'I':sum[8]++; break;
case 'j':case 'J':sum[9]++; break;
case 'k':case 'K':sum[10]++; break;
case 'l':case 'L':sum[11]++; break;
case 'm':case 'M':sum[12]++; break;
case 'n':case 'N':sum[13]++; break;
case 'o':case 'O':sum[14]++; break;
case 'p':case 'P':sum[15]++; break;
case 'q':case 'Q':sum[16]++; break;
case 'r':case 'R':sum[17]++; break;
case 's':case 'S':sum[18]++; break;
case 't':case 'T':sum[19]++; break;
case 'u':case 'U':sum[20]++; break;
case 'v':case 'V':sum[21]++; break;
case 'w':case 'W':sum[22]++; break;
case 'x':case 'X':sum[23]++; break;
case 'y':case 'Y':sum[24]++; break;
case 'z':case 'Z':sum[25]++; break;
}
}
}
else
{
break;
}
}
for (i = 0; i < 26; i++)
{
if (sum[i] != 0)
{
printf("%c%d ", 'a'+ i, sum[i]);
}
}
}
同学写的2 参考
#include
int main()
{
int i, j, k = 0;
char temp;
char sum[100][2] = { 0 };
for (i = 0; i < 100; i++)
{
temp = getchar();
if (temp != '\n') //回车
{
for (j = k; j < 100; j++)
{
if (sum[j][0] == temp) //temp和sum字母一样的 直接break
{
break; //跳出到sum[j][i]++;来计数
}
if (sum[j][0] == 0) //遇到新的字母
{
sum[j][0] = temp;
k = j; //防止重复计数旧的字母
break;
}
}
sum[j][1]++; //存数字
}
else
{
break;
}
}
for (i = 0; i < 26; i++)
{
if (sum[i][1] != 0)
{
printf("%d%c", sum[i][1],sum[i][0] );
}
}
}
//aaba =>2a1b1a
#include
int main()
{
int i, j;
char temp;
char sum[26][2] = { 0 };
for (i = 0; i < 100; i++)
{
temp = getchar();
if (temp != '\n') //回车
{
for (j = 0; j < 26; j++)
{
if (sum[j][0] == temp) //temp和sum字母一样的 直接break
{
break; //跳出到sum[j][i]++;来计数
}
if (sum[j][0] == 0) //遇到新的字母
{
sum[j][0] = temp;
break;
}
}
sum[j][1]++; //存数字
}
else
{
break;
}
}
for (i = 0; i < 26; i++)
{
if (sum[i][1] != 0)
{
printf("%d%c", sum[i][1],sum[i][0] );
}
}
}
//aaba => 3a1b
#include
#include
#include
int main()
{
char s[100], c, l;
int len, i, count;
gets(s); //gets只有遇到\n时才会结束输入,而scanf遇到空格或制表符时,也会结束输入。
len = strlen(s);
count = 1;
l = s[0];
for (i = 1; i <= len; i++) {
c = s[i];
if (c == l) { //当存在c的字符和l的字符是一样的,就计数+1
count++;
}
else { //c和l的字符不一样,就输出计数之前有多少个同一字符
printf("%d%c", count, l);
count = 1; //count重新从1开始
}
l = c; //l是这一轮最后一个字符 来验证是否与下一个字符相同
}
printf("\n");
return 0;
}
//gets(s)函数
//例如输入abc 12345 89按回车
//如果用gets(s)接收,字符数组s将保存abc 12345 89\0
//而用scanf("%s", s)接收, 字符数组s将保存abc\0.
//这说明gets遇到回车才停止接收,而scanf("%s")碰到空白符停止接收
详细解答
#include
int main()
{
int i, j, k = 0;
char temp;
char sum[100][2] = { 0 };
for (i = 0; i < 100; i++)
{
temp = getchar();
if (temp != '\n')
{
for (j = k; j < 100; j++) //for(j = 0;j < 100;j++)如果是这种循环,j每次都会遍历一遍数组。如果输入的是aaba
{ //temp得到第一个a,发现不是回车,就继续往下执行
//j从0开始循环,发现sum[0][0]== 0,于是就把temp的值赋给sum[0][0],结束循环,sum[0][1]+1;
if (sum[j][0] == temp) //第二个a,j从0开始循环,发现sum[0][0] == temp,结束循环,sum[0][1]+1;
{ //第一个b,j从0开始循环,发现sum[1][0] == 0,,于是就把temp的值赋给sum[1][0] 结束循环,sum[1][1]+1;
break; //第三个a,j从0开始循环,发现sum[0][0] == temp,结束循环,sum[0][1]+1;
} //最后结果是3a1b;
if (sum[j][0] == 0)
{ //
sum[j][0] = temp; //
k = j; //k = j 抽象点来说就是让这个循环只和上一个temp的字母进行比较,而不是和所有的。
break; //具体点的话:
} //第一次运行k初始值为0,j从k(0)开始循环,发现sum[0][0]== 0,就把temp的值赋给sum[0][0],执行k=j=0,结束循环,sum[0][1]+1;
} //第二个a,这时候j=k=0,j从0开始循环,发现sum[0][0] == temp,结束循环,sum[0][1]+1;
sum[j][1]++; //第一个b,这时候j=k=0,j从0开始循环,发现sum[1][0] == 0,,于是就把temp的值赋给sum[1][0],执行k=j=1,结束循环,sum[1][1]+1;
} //第三个a,这时候j=k=1,j从1开始循环,跳过了sum[0][0],因为sum[1][0]==b,既不满足==temp也不满足==0,进行下一次循环
else //j = 2, 发现sum[2][0] == 0,,于是就把temp的值赋给sum[2][0],执行k=j=2,结束循环,sum[2][1]+1;
{ //假如之后还有输入,j就从2开始循环。
break;
}
}
for (i = 0; i < 100; i++)
{
if (sum[i][1] != 0)
{
printf("%c%d ", sum[i][0], sum[i][1]);
}
}
}