1、使用 fopen、fgetc、fputc 和 toupper 函数
逐字符读取文件内容,将其转换为大写后写入另一个文件中。
#include <stdio.h>
#include <ctype.h>
void convert_to_uppercase_fgetc_fputc(const char *input_file, const char *output_file) {
FILE *in_fp = fopen(input_file, "r");
FILE *out_fp = fopen(output_file, "w");
if (in_fp == NULL || out_fp == NULL) {
perror("Error opening file");
return;
}
int ch;
while ((ch = fgetc(in_fp)) != EOF) {
fputc(toupper(ch), out_fp);
}
fclose(in_fp);
fclose(out_fp);
}
int main() {
convert_to_uppercase_fgetc_fputc("input.txt", "output.txt");
return 0;
}
2、使用 fopen、fgets、fputs 和 toupper 函数
逐行读取文件内容,将每一行的内容转换为大写后写入文件。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
// 自定义 strupr 函数,因为标准 C 库中没有 strupr
char *strupr(char *str) {
char *orig = str;
while (*str) {
*str = toupper(*str);
str++;
}
return orig;
}
void convert_to_uppercase(const char *input_file, const char *output_file) {
FILE *in_fp = fopen(input_file, "r");
FILE *out_fp = fopen(output_file, "w");
if (in_fp == NULL || out_fp == NULL) {
perror("Error opening file");
exit(EXIT_FAILURE);
}
char buffer[1024];
while (fgets(buffer, sizeof(buffer), in_fp) != NULL) {
fputs(strupr(buffer), out_fp);
}
fclose(in_fp);
fclose(out_fp);
}
int main() {
convert_to_uppercase("input.txt", "output.txt");
return 0;
}
3、使用 fopen、fread、fwrite 和 toupper 函数
一次性读取块数据,将其转换为大写后再写入文件。
#include <stdio.h>
#include <ctype.h>
void convert_to_uppercase_fread_fwrite(const char *input_file, const char *output_file) {
FILE *in_fp = fopen(input_file, "r");
FILE *out_fp = fopen(output_file, "w");
if (in_fp == NULL || out_fp == NULL) {
perror("Error opening file");
return;
}
char buffer[1024];
size_t bytes_read;
while ((bytes_read = fread(buffer, 1, sizeof(buffer), in_fp)) > 0) {
for (size_t i = 0; i < bytes_read; i++) {
buffer[i] = toupper(buffer[i]);
}
fwrite(buffer, 1, bytes_read, out_fp);
}
fclose(in_fp);
fclose(out_fp);
}
int main() {
convert_to_uppercase_fread_fwrite("input.txt", "output.txt");
return 0;
}