简介
在C++中,文件的读写操作是一项常见的任务。除了前文介绍的fgets
和fputs
函数外,还有gets
和puts
函数也是文件读写的重要组成部分。
fgets
函数:读取文件内容
fgets
函数用于从文件中读取一行内容,并将其保存到指定的字符数组中。它的原型如下:
char* fgets(char* str, int num, FILE* stream);
str
: 指向字符数组的指针,用于存储读取的字符串。num
: 最大读取字符数,通常为数组的大小。stream
: 文件指针,指向要读取的文件。
以下是一个示例代码,展示如何使用fgets
函数从文件中逐行读取内容并输出:
#include <iostream>
#include <cstdio>
int main() {
FILE* file = fopen("example.txt", "r"); // 打开文件,以只读模式
if (file) {
char buffer[256];
while (fgets(buffer, sizeof(buffer), file)) {
std::cout << buffer; // 输出读取的内容
}
fclose(file); // 关闭文件
} else {
std::cout << "无法打开文件" << std::endl;
}
return 0;
}
fputs
函数:写入文件内容
fputs
函数用于将字符串写入文件中。它的原型如下:
int fputs(const char* str, FILE* stream);
str
: 要写入的字符串。stream
: 文件指针,指向要写入的文件。
以下是一个示例代码,展示如何使用fputs
函数将字符串写入文件中:
#include <iostream>
#include <cstdio>
int main() {
FILE* file = fopen("output.txt", "w"); // 打开文件,以写入模式
if (file) {
const char* message = "Hello, fputs!";
if (fputs(message, file) != EOF) {
std::cout << "写入成功" << std::endl;
} else {
std::cout << "写入失败" << std::endl;
}
fclose(file); // 关闭文件
} else {
std::cout << "无法打开文件" << std::endl;
}
return 0;
}
gets
函数:不安全的读取字符串
gets
函数用于从标准输入读取字符串,并将其保存到指定的字符数组中。然而,gets
函数存在安全性问题,因为它没有提供输入字符数的限制,可能导致缓冲区溢出。因此,建议尽量避免使用gets
函数。
以下是一个示例代码,展示如何使用gets
函数读取字符串:
#include <iostream>
int main() {
char buffer[256];
std::cout << "请输入字符串:";
gets(buffer);
std::cout << "您输入的字符串是:" << buffer << std::endl;
return 0;
}
puts
函数:向标准输出打印字符串
puts
函数用于向标准输出打印字符串,并在末尾添加换行符。它的原型如下:
int puts(const char* str);
str
: 要打印的字符串。
以下是一个示例代码,展示如何使用puts
函数打印字符串:
#include <iostream>
int main() {
const char* message = "Hello, puts!";
puts(message);
return 0;
}
统计文件中的单词数
统计文件中的单词数。假设我们有一份包含文本内容的文件,我们将使用fgets
函数逐行读取文件内容,并利用字符串处理技巧来统计单词数。
#include <iostream>
#include <cstdio>
#include <cstring>
int main() {
FILE* file = fopen("text.txt", "r"); // 打开文件,以只读模式
if (file) {
char buffer[256];
int wordCount = 0;
while (fgets(buffer, sizeof(buffer), file)) {
char* token = strtok(buffer, " \t\n"); // 使用空格、制表符和换行符作为分隔符
while (token) {
wordCount++;
token = strtok(NULL, " \t\n");
}
}
std::cout << "文件中的单词数:" << wordCount << std::endl;
fclose(file); // 关闭文件
} else {
std::cout << "无法打开文件" << std::endl;
}
return 0;
}