C++如何检测文件行尾?搜索引擎关键词读取代码问题
问题解决:提取文件中的关键词到字符串数组
你的代码问题分析
- 行尾检测逻辑错误:
getline读取的字符串temp已经自动去掉了换行符,所以temp != '\n'的判断完全不成立;而且你在读取到关键词行后,又用myfile>>temp直接从文件读取,会跳过当前行剩余内容,直接读取下一行,逻辑混乱。 eof()循环错误:while (!myfile.eof())会导致最后一行重复处理,因为文件结束标志是在读取失败后才触发的。- 变量名不规范:用
main作为数组名不合适,这是C++主函数的名称,容易混淆。
修正后的代码
#include<iostream> #include<fstream> #include<string> #include<sstream> // 用于字符串流拆分单词 using namespace std; int main(){ int count = 0; // 用于计数,跳过URL行 int ele = 0; // 记录关键词总数 string fname; cout<<"输入文件名: "; cin>>fname; string temp; string keywords[10000]; // 替换main为keywords,避免命名冲突 fstream myfile(fname); // 直接构造打开文件,写法更简洁 // 正确的文件读取循环:每次读取一行,直到文件结束 while (getline(myfile, temp)) { if(count == 2){ // 第3行(从0开始计数是第2个)是关键词行 // 用字符串流拆分当前行的所有单词 stringstream ss(temp); string word; while (ss >> word) { // 从流中逐个读取单词,直到行尾 keywords[ele] = word; ele++; } count = 0; // 重置计数,准备处理下一组URL和关键词 continue; } count++; } myfile.close(); // 输出所有关键词 for(int i=0;i<ele;i++){ cout<<keywords[i]<<endl; } system("pause"); return 0; }
关键修改说明
- 使用
stringstream拆分关键词行:把读取到的整行内容传入字符串流,然后用>>运算符逐个提取单词,这个运算符会自动跳过空格,直到行尾(流结束),完美解决你不知道如何检测行尾的问题。 - 替换文件读取循环:
while (getline(myfile, temp))会在读取失败(比如文件结束)时自动退出循环,避免了eof()的坑。 - 修正变量名:把
main数组改成keywords,代码更清晰,避免命名冲突。
内容的提问来源于stack exchange,提问作者hadi khan
相关产品推荐
相关产品推荐

