用C语言对文件中若干个字符串进行排序,并将结果更新到文件中
时间: 2024-09-15 22:01:56 浏览: 135
在C语言中,对文件中的字符串数组进行排序并写回文件通常涉及以下几个步骤:
1. **读取文件内容**:首先需要打开文件,然后逐行读取其中的内容,存储到动态分配的字符串数组中。
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_LINES 100
char *strings[MAX_LINES]; // 存储字符串的数组
int num_strings = 0; // 当前读取到的字符串数量
// 读取文件函数
void read_strings_from_file(char *filename) {
FILE *file = fopen(filename, "r");
if (file == NULL) {
perror("Error opening file");
return;
}
char line[100];
while (fgets(line, sizeof(line), file)) {
strings[num_strings++] = strdup(line); // 复制一行作为字符串并添加到数组
}
fclose(file);
}
```
2. **排序字符串**:这里可以使用标准库函数`qsort()`对数组进行排序,例如按照字典序排列。
```c
#include <string.h>
#include <ctype.h> // 需要用到toupper()比较忽略大小写
int compare_strings(const void *a, const void *b) {
const char *str1 = *(const char **)a;
const char *str2 = *(const char **)b;
int len1 = strlen(str1);
int len2 = strlen(str2);
for (size_t i = 0; i < MIN(len1, len2); i++) {
if (tolower(str1[i]) != tolower(str2[i])) {
return str1[i] - str2[i];
}
}
return len1 - len2; // 如果长度相等,按原顺序处理
}
// 排序字符串数组
void sort_strings(void) {
qsort(strings, num_strings, sizeof(char*), compare_strings);
}
```
3. **写回文件**:排序后,将字符串数组更新回文件。这次你需要创建一个新的文件,因为原始文件已经损坏了。
```c
void write_strings_to_file(char *filename) {
FILE *file = fopen(filename, "w");
if (file == NULL) {
perror("Error opening file for writing");
return;
}
for (int i = 0; i < num_strings; i++) {
fprintf(file, "%s\n", strings[i]);
}
fclose(file);
}
```
4. **整合整个流程**:
```c
int main() {
char filename[] = "input.txt";
read_strings_from_file(filename);
sort_strings();
write_strings_to_file("output.txt");
return 0;
}
```
阅读全文