比较If语句中的字符

时间:2017-09-21 16:35:32

标签: c

两天前我开始学习C,在完成作业时遇到了问题。我们的目的是从char数组中获取一个字符列表,并通过计算连续的字符并用数字替换它来缩短它。说" aaaabbbbbccccc"到" a4b5c5"。这是我到目前为止的代码:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]) { 
    char letters[999];
    char newString[100];
    char counter[100];

    printf("Please input a string: ");
    fgets(letters, sizeof(letters), stdin);

    int i;
    int count = 1;
    int end = 0;

    for (i=0; i < strlen(letters); i++) {
        if (letters[i] != letters[i+1] || letters[i+1] == '\0') {
            newString[end] = letters[i];
            end++;
            printf("CHECK HERE");
            count = 1;
        } else if (letters[i] == letters[i+1]) {
            count++;
        }
    }

    printf("%s", newString);
    return 0;
}

由于某些原因,这会导致第一个if语句的次数不正确,我无法弄清楚原因。它与字符平等声明有关吗?输出结果是

CHECK HERECHECK HERECHECK HERE
[letters in newString]

1 个答案:

答案 0 :(得分:0)

比较你所做的字符没有问题。但是,您的代码不会根据您的要求生成目标字符串。计数未加载到新字符串中。

if(letters[i] != letters[i+1] || letters[i+1] == '\0') {
    newString [end] = letters [i];
    end++; 
    newString [end] = '0' + count; /* Converting integer count to ascii char */
    end++;
} 

注意:不要忘记空终止新字符串。
PS。:如果是&gt;您需要专门处理。 1位数(逐字节加载)。

相关问题