【发布时间】:2020-05-23 23:01:38
【问题描述】:
编辑: 这根本不能可靠地处理字符串。我已更改整个系统以使用 int 数组。也消除了许多其他令人头疼的问题。我的 MVC 的工作版本是:
#include <stdio.h>
#include <string.h>
int main (){
int nextChar;
int augmented[256];
int index = 0;
while ((nextChar = fgetc(stdin)) != EOF){
augmented[index] = nextChar;
index++;
}
for (int i = 0; i <= index;++i){
printf("%c", augmented[i]);
}
}
结束编辑
原帖:
我正在尝试为作业实施 LZW 压缩器。到目前为止,一切都在文本上运行良好,但如果输入文件包含大量空字符,我就会扔掉垃圾。
在开始时,我将传入的 char 存储为 int 以检查 EOF,然后将其转换为 char 以连接到我的增强字符串以进行字典比较。我已经在每个文件之后打印出我的字典,发现长时间运行的零我的字典条目是一个空字符串。
我认为发生的事情是它需要一串零并使其成为单个零。不是所需的值。我需要把所有这些零都去掉。
我制作了一个最小的可行代码来显示错误,并发现它发生在铸造阶段。如何构建一个空字符检查,以便我可以用它来替换可以存储在字符串中的其他内容?
#include <stdio.h>
#include <string.h>
int main (){
int nextChar;
char augmented[256] = "\0";
while ((nextChar = fgetc(stdin) != EOF)){
char charBuffer[2];
sprintf(charBuffer, "%c", nextChar);
strcat(augmented, charBuffer);
}
printf("%s",augmented);
}
我已经搜索了几天,我想我似乎无法弄清楚正确的查询应该是什么,因为我没有找到任何有用的结果。
【问题讨论】:
-
如果数据包含零,那么使用字符串函数就不会顺利进行。您最好将索引保存到
augmented[]并直接写信给它,而不是绕着房子走。 -
这让我走上了正轨。我放弃了所有字符串,并在 int 数组上完成了整个工作。
-
关于:
while ((nextChar = fgetc(stdin)) != EOF){ augmented[index] = nextChar; index++; }此代码允许在augumented[256]中存储无限数量的字符但是,该数组只有 256 个字节长。建议:while ( index < sizeof( augmented ) && (nextChar = fgetc(stdin)) != EOF){ augmented[index] = nextChar; index++; }