我最近试着用C编写RLE,我已经重写了5次,所有的时候它只是说“”或者只是null。这是我的最新版本,有谁能帮我吗?
#include <stdio.h>
#include <string.h>
char rle(char src[]) {
char chr = src[0], res = "";
int count = 0, len = strlen(src), tmp = 0;
for (int i; i < len; i++) {
while (chr == src[i]) {
count++, i++;
}
chr = src[i];
tmp = i;
}
res+=src[tmp] + snprintf(NULL,0,"%d",count);
return res;
}
int main(int argc, char *argv[]) {
printf("%s", rle("aaaaa"));
}
尝试比较当前角色和下一个角色,不起作用。
1条答案
按热度按时间vhipe2zx1#
char
是 * 字符类型 *,而不是 * 字符串类型 *。char
表示单个字符-一个字节的信息。string实际上是指向字节序列的第一个字符的指针,总是以零字节结束。最常见的类型为 pointer-to-char(
char *
)或 array-of-char(char []
)。字符串需要 space - memory; a buffer.您必须以某种方式分配此内存-自动分配的数组,动态内存块(必须手动调整大小),静态池等。
C中的字符串不能与
+
运算符组合。您必须使用像strcat
这样的字符串函数、像sprintf
这样的字符串I/O函数,或者手动操作字符串中的各个字节。snprintf
返回int
,而不是字符串。此值表示写入缓冲区的字节数,或在发生截断时 * 本应写入 * 的字节数,或在发生错误时为-1
。这里是RLE的基本实现,但你可能想拿起你的C textbook,重新阅读有关类型和字符串的章节。