You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++如何检测文件行尾?搜索引擎关键词读取代码问题

问题解决:提取文件中的关键词到字符串数组

你的代码问题分析

  1. 行尾检测逻辑错误:getline读取的字符串temp已经自动去掉了换行符,所以temp != '\n'的判断完全不成立;而且你在读取到关键词行后,又用myfile>>temp直接从文件读取,会跳过当前行剩余内容,直接读取下一行,逻辑混乱。
  2. eof()循环错误:while (!myfile.eof())会导致最后一行重复处理,因为文件结束标志是在读取失败后才触发的。
  3. 变量名不规范:用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 08:35:32