作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我两天前开始学习C,在做作业时遇到了问题。我们的目的是从字符数组中获取字符列表,并通过计算连续字符并将其替换为数字来缩短它。对“a4b5c5”说“aaaabbbbbccccc”。这是我到目前为止的代码:
#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]
最佳答案
像您所做的那样比较字符没有问题。但是,您的代码不会根据您的要求生成目标字符串。计数不会加载到新字符串中。
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++;
}
注意:不要忘记以 null 结尾新字符串。
PS.: 如果计数 > 1 位(逐字节加载),则需要特殊处理。
关于比较 If 语句中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46349017/
我是一名优秀的程序员,十分优秀!