两天前我开始学习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]
答案 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位数(逐字节加载)。