C++中使用getline函数可逐行读取文件,能完整获取含空格的行,避免>>操作符遇空白停止的问题。通过while(getline(file, line))循环读取,需包含<fstream>和<string>头文件,并检查文件是否成功打开。getline以换行符为默认分隔符,可处理空行(line为空字符串)和行尾空白(需手动trim)。使用getline(file, line, delim)可指定自定义分隔符,常用于解析CSV等格式。推荐先用getline读整行,再用stringstream解析字段,提升容错性与灵活性。

C++中逐行读取文件,
getline
>>
要使用
getline
while
std::ifstream
std::string
首先,你需要包含
<fstream>
<string>
std::ifstream
is_open()
false
#include <iostream>
#include <fstream>
#include <string>
// 假设文件名为 "example.txt"
// 文件内容可能是:
// Hello World!
// This is a test.
//
// Another line.
int main() {
std::ifstream inputFile("example.txt"); // 尝试打开文件
std::string line; // 用于存储读取到的每一行
if (!inputFile.is_open()) { // 检查文件是否成功打开
std::cerr << "错误:无法打开文件!请检查文件路径和权限。" << std::endl;
return 1; // 返回错误码
}
// 循环读取文件,直到文件末尾或发生错误
while (std::getline(inputFile, line)) {
// 成功读取到一行内容,可以在这里对line进行处理
std::cout << "读取到一行: " << line << std::endl;
}
inputFile.close(); // 关闭文件流,释放资源
return 0;
}
这个
while (std::getline(inputFile, line))
getline
false
inputFile.close()
ifstream
立即学习“C++免费学习笔记(深入)”;
getline
>>
getline
这是一个非常经典的问题,也是初学者常常混淆的地方。简单来说,
getline
istream
>>
>>
inputFile >> word;
>>
而
getline(inputFile, line)
\n
line
line
何时选择getline
getline
std::cin >> input;
std::getline(std::cin, input);
getline
std::stringstream
>>
何时选择>>
说实话,我更倾向于先用
getline
stringstream
getline
getline
PHP 独特的语法混合了 C、Java、Perl 以及 PHP 自创新的语法。它可以比 CGI或者Perl更快速的执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多。下面介绍了十个PHP高级应用技巧。 1, 使用 ip2long() 和 long2ip() 函数来把 IP 地址转化成整型存储到数据库里
440
空行处理: 当
getline
std::string
line
line
getline
// ... (之前的代码)
while (std::getline(inputFile, line)) {
if (line.empty()) { // 如果是空行,跳过当前循环
std::cout << "跳过一个空行。" << std::endl;
continue;
}
std::cout << "处理行: " << line << std::endl;
}
// ...这种处理方式非常常见,尤其是在处理用户输入或不规范的文本文件时。
行尾空白处理:
getline
"Hello World "
line
"Hello World "
这有时会导致一些小麻烦,比如当你把读取到的字符串用于比较或者作为文件路径时,多余的空格可能会导致匹配失败。要处理这些行尾空白,你需要手动进行“修剪”(trim)操作。C++标准库并没有内置的
trim
#include <algorithm> // for std::find_if
#include <cctype> // for std::isspace
// ... (在主函数或其他地方)
while (std::getline(inputFile, line)) {
// 移除行尾空白(右修剪)
line.erase(std::find_if(line.rbegin(), line.rend(), [](unsigned char ch) {
return !std::isspace(ch);
}).base(), line.end());
if (line.empty()) { // 再次检查是否修剪后变成空行
std::cout << "跳过一个修剪后变为空的行。" << std::endl;
continue;
}
std::cout << "修剪后处理行: '" << line << "'" << std::endl;
}
// ...这个右修剪的技巧是找到最后一个非空白字符的位置,然后删除它之后的所有字符。如果你还需要修剪左侧空白,逻辑会稍微复杂一些,但原理类似。对我来说,处理空白字符是文件I/O中一个需要特别留心的细节,因为它常常是隐形的bug源头。
getline
getline
std::getline(istream& is, string& str, char delim);
这里的
delim
getline
delim
str
delim
getline
str
举个例子,假设你有一个CSV文件,内容如下:
Apple,Red,Fruit Banana,Yellow,Fruit Carrot,Orange,Vegetable
如果你想逐个读取这些字段,而不是整行,你可以这样做:
#include <iostream>
#include <fstream>
#include <string>
#include <sstream> // 用于字符串流,方便解析
int main() {
std::ifstream inputFile("data.csv");
std::string line;
if (!inputFile.is_open()) {
std::cerr << "错误:无法打开CSV文件!" << std::endl;
return 1;
}
while (std::getline(inputFile, line)) { // 先逐行读取
std::stringstream ss(line); // 将整行内容放入字符串流
std::string item; // 用于存储每个字段
std::cout << "处理行: " << line << std::endl;
// 使用getline从stringstream中以逗号为分隔符读取字段
while (std::getline(ss, item, ',')) {
std::cout << " 字段: " << item << std::endl;
}
std::cout << "---" << std::endl;
}
inputFile.close();
return 0;
}在这个例子中,我使用了两层
getline
getline(inputFile, line)
line
std::stringstream
ss
getline(ss, item, ',')
stringstream
这种组合方式非常强大且灵活。它允许你先以行(默认分隔符
\n
,
\t
getline
以上就是C++逐行读取文件 getline函数使用技巧的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号