用c语言【问题描述】 编写一个程序,从一个文件中读入单词(即:以空格分隔的字符串),并对单词进行排序,删除重复出现的单词,然后将结果输出到另一个文件中。 【输入形式】 从一个文件sort.in中读入单词。 【输出形式】 对单词进行排序,删除重复出现的单词,然后将结果输出到文件sort.out中。 【输入样例】 假如sort.in文件内容如下: rrr sss aaa bbb ccc ddf aaa dd 【输出样例】 sort.out文件内容为: aaa bbb ccc dd ddf rrr sss 【样例说明】 读入文件sort.in,做适当的排序,并删除重复出现的单词,输出到文件sort.out
时间: 2024-02-22 12:59:42 浏览: 108
好的,以下是一个用C语言编写的程序,可以实现你的要求:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_WORD_LEN 50
#define MAX_WORD_NUM 1000
int cmp(const void* a, const void* b) {
return strcmp(*(char**)a, *(char**)b);
}
int main() {
char words[MAX_WORD_NUM][MAX_WORD_LEN + 1];
char* unique_words[MAX_WORD_NUM];
int word_count = 0, unique_word_count = 0, i;
// 从输入文件读取单词
FILE* fp = fopen("sort.in", "r");
while (fscanf(fp, "%s", words[word_count]) != EOF) {
word_count++;
}
fclose(fp);
// 对单词进行排序
qsort(words, word_count, MAX_WORD_LEN + 1, cmp);
// 删除重复出现的单词
for (i = 0; i < word_count; i++) {
if (i == 0 || strcmp(words[i], words[i - 1]) != 0) {
unique_words[unique_word_count++] = words[i];
}
}
// 将结果输出到输出文件
fp = fopen("sort.out", "w");
for (i = 0; i < unique_word_count; i++) {
fprintf(fp, "%s ", unique_words[i]);
}
fprintf(fp, "\n");
fclose(fp);
return 0;
}
```
这个程序首先从输入文件sort.in中读取单词,并存储到一个二维字符数组words中。然后,使用标准库函数qsort对单词进行排序。接着,使用一个指针数组unique_words,遍历排序后的单词数组,将不重复的单词按顺序存储到unique_words中,并统计不重复的单词个数unique_word_count。最后,将unique_words中的单词输出到输出文件sort.out中。注意,为了保证程序的通用性,我们使用了文件流操作,而不是直接使用文件名作为参数。
阅读全文