我的程序需要输入

时间:2018-01-06 08:52:47

标签: c

我需要编写代码 给定输入字符串对其进行编码,优先考虑其类型的第一个字符

输入格式

输入包含带

的字符串

约束

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;
}

对于那些帮助我的人来说,它不适用于某些输入?(我不知道输入,因为它是来自竞赛的问题) 谢谢。

1 个答案:

答案 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次,那么输出的输出将在输出字符串中有一些字符而不是字符数。我将它留给您添加代码以处理这种特定情况。