我需要编写代码 给定输入字符串对其进行编码,优先考虑其类型的第一个字符
输入格式
输入包含带
的字符串约束
1 <= length <= 200
输出格式
我们必须以编码格式打印字符串
Sample Input 0
abbcc
Sample Output 0
ab2c2
Sample Input 1
aAABbb
Sample Output 1
a3B3
继承我的代码:
#include <math.h>
#include <stdio.h>
#include <string.h>
#define N 201
#define dif ('a'-'A')
int main() {
char arr[N],res[N],lower[N];
scanf("%s",arr);
int index=0,cnt=0,i;
for(i=0;arr[i]!='\0';i++)
{
lower[i] = arr[i];
if(arr[i]>='A'&&arr[i]<='Z')
lower[i] += dif;
}
index = 0;
res[cnt] = arr[0];
cnt++;
for(i=0;lower[i]!='\0';i++)
{
if(lower[i]!=lower[i+1])
{
if(i+1-index!=1)
{
res[cnt] = i-index+1+48;
cnt++;
}
res[cnt] = arr[i+1];
cnt+=1;
index = i+1;
}
}
res[cnt] = '\0';
printf("%s",res);
return 0;
}
对于那些帮助我的人来说,它不适用于某些输入?(我不知道输入,因为它是来自竞赛的问题) 谢谢。
答案 0 :(得分:0)
你可以这样做:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define N 201
int main() {
char arr[N],res[N];
int count,i,j;
printf ("Enter alphabetic string:\n");
fgets(arr, N, stdin);
arr[strcspn(arr, "\n")] = 0;
size_t len = strlen(arr);
for (i = 0, j = 0, count = 0; i < len; i++) {
if (!isalpha(arr[i])) {
printf ("Invalid character <%c> in string %s\n", arr[i], arr);
return -1;
}
if (i == 0) {
res[j++] = arr[i];
continue;
}
if (tolower(arr[i]) == tolower(arr[i-1]))
count++;
else {
if (count == 0) {
res[j++] = arr[i];
} else {
res[j++] = count + '0' + 1;
res[j++] = arr[i];
count = 0;
}
}
}
if (count != 0)
res[j++] = count + '0' + 1;
res[j] = '\0';
printf ("result : %s\n", res);
return 0;
}
输出:
$ ./a.out
Enter alphabatic string:
abbcc
result : ab2c2
$ ./a.out
Enter alphabatic string:
aAABbb
result : a3B3
$ ./a.out
Enter alphabatic string:
rrrfVvVd
result : r3fV3d
$ ./a.out
Enter alphabatic string:
QQQaaaaeeeeeeeeeccFg
result : Q3a4e9c2Fg
请注意,程序没有检查count
值,如果输入字符串中的字符连续超过9次,那么输出的输出将在输出字符串中有一些字符而不是字符数。我将它留给您添加代码以处理这种特定情况。