作者热门文章
- html - 我的下拉菜单的内容关闭得太快
- c# - 使用 Html Agility Pack 从网页中的表中获取值而不使用 "SelectNode'
- html - 内容容器下的 CSS 下拉菜单
- html - 如何停止嵌套列表重叠父列表?
我两天前开始学习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/
我是一名优秀的程序员,十分优秀!