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 【评分标准】 对单词进行排序,删除重复出现的单词,符合此要求得20分,每个测试点4分,提交程序名为sortwords.c。
时间: 2024-02-25 19:54:27 浏览: 19
好的,以下是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_WORD_LENGTH 50 // 单词最大长度
#define MAX_WORDS_NUM 1000 // 单词最大数量
int main() {
char words[MAX_WORDS_NUM][MAX_WORD_LENGTH]; // 存储单词的数组
int wordsNum = 0; // 单词数量
char word[MAX_WORD_LENGTH]; // 存储当前单词
char filenameIn[] = "sort.in"; // 输入文件名
char filenameOut[] = "sort.out"; // 输出文件名
FILE *fpIn, *fpOut; // 文件指针
// 打开输入文件
fpIn = fopen(filenameIn, "r");
if (fpIn == NULL) {
printf("Can't open file %s\n", filenameIn);
exit(EXIT_FAILURE);
}
// 读取单词并存储到数组中
while (fscanf(fpIn, "%s", word) != EOF) {
// 判断单词是否已经存在
int exist = 0;
for (int i = 0; i < wordsNum; i++) {
if (strcmp(words[i], word) == 0) {
exist = 1;
break;
}
}
if (!exist) {
strcpy(words[wordsNum], word); // 存储单词
wordsNum++; // 单词数量加一
}
}
// 关闭输入文件
fclose(fpIn);
// 冒泡排序
for (int i = 0; i < wordsNum; i++) {
for (int j = i + 1; j < wordsNum; j++) {
if (strcmp(words[i], words[j]) > 0) {
char temp[MAX_WORD_LENGTH];
strcpy(temp, words[i]);
strcpy(words[i], words[j]);
strcpy(words[j], temp);
}
}
}
// 打开输出文件
fpOut = fopen(filenameOut, "w");
if (fpOut == NULL) {
printf("Can't open file %s\n", filenameOut);
exit(EXIT_FAILURE);
}
// 将排序后的单词写入输出文件中
for (int i = 0; i < wordsNum; i++) {
fprintf(fpOut, "%s ", words[i]);
}
// 关闭输出文件
fclose(fpOut);
return 0;
}
```
该程序首先打开输入文件,读取文件中的单词并存储到一个数组中,同时删除重复出现的单词。然后,使用冒泡排序对单词进行排序,最后将排好序的单词写入输出文件中。