C语言题目,求大神解答

3.读出文件“file1.txt”中的字符串,采用行程长度压缩编码方法RLC进行压缩,并将结果写入“file2.txt”中。
【测试数据】:
“file1.txt”中的字符串:aaaaabbbbcccddddaafff
【运行结果】
“file2.txt”中的字符串:a5b4c3d4a2f3

以下是使用C语言编写的解答:
```c
#include <stdio.h>
#include <string.h>
void compressRLC(char* input, char* output) {
int length = strlen(input);
int count = 1;

for (int i = 0; i < length; i++) {
if (input[i] == input[i+1]) {
count++;
} else {
sprintf(output + strlen(output), "%c%d", input[i], count);
count = 1;
}
}
}
int main() {
FILE* inputFile = fopen("file1.txt", "r");
FILE* outputFile = fopen("file2.txt", "w");

char inputString[100];
fgets(inputString, sizeof(inputString), inputFile);

char compressedString[200];
compressRLC(inputString, compressedString);

fprintf(outputFile, "%s\n", compressedString);

fclose(inputFile);
fclose(outputFile);

return 0;
}
```
这段代码会打开名为"file1.txt"的文件,读取其中的字符串。然后,它会使用行程长度压缩编码(RLC)方法对字符串进行压缩,并将结果写入名为"file2.txt"的文件中。
请注意,这段代码假设输入文件中只包含一个字符串,并且输出文件的路径和名称已经正确设置。
你可以将这段代码复制到一个新的C文件中,然后编译并运行它,以得到预期的结果。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-12-21
#include <stdio.h>
#include <stdlib.h>
#define MAX_LEN 1000 // 最大长度
int main(int argc, char *argv[])
{
// 打开文件 file1.txt
FILE *infile = fopen("file1.txt", "r");
if (infile == NULL)
{
printf("Error opening file1.txt!\n");
return 1;
}
// 打开文件 file2.txt
FILE *outfile = fopen("file2.txt", "w");
if (outfile == NULL)
{
printf("Error opening file2.txt!\n");
return 1;
}
char s[MAX_LEN]; // 用于存储读取的字符串
fgets(s, MAX_LEN, infile); // 读取字符串
// 利用 RLC 算法进行压缩
char c = s[0]; // 当前字符
int count = 1; // 当前字符的出现次数
for (int i = 1; s[i] != '\0'; i++)
{
if (s[i] == c)
{
count++;
}
else
{
// 输出当前字符及其出现的次数
fprintf(outfile, "%c%d", c, count);
c = s[i];
count = 1;
}
}
// 输出最后一个字符及其出现的次数
fprintf(outfile, "%c%d", c, count);
// 关闭文件
fclose(infile);
fclose(outfile);
return 0;
}
相似回答