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

C++读取键值对文件时,如何跳过以#开头的行?

解决方案

要跳过所有以#开头的整行,你得先按整行读取文件内容,判断行首是否为#后,再决定是否处理该行的键值对——直接用getline(inFile, astring, '=')会忽略行边界,根本没法判断整行是不是注释行。

具体实现思路:

  • 先读取完整的一行到临时字符串
  • 检查该行是否为空,或者以#开头:满足任一条件就直接跳过当前循环
  • 若不是注释行,再对这一行做按=分割的操作,把键和值存入vector

示例代码:

#include <fstream>
#include <string>
#include <vector>
#include <utility>

using namespace std;

int main() {
    ifstream inFile("target_file.txt");
    vector<pair<string, string>> keyValueList;
    string line;

    while (getline(inFile, line)) { // 先按整行读取
        // 跳过空行和注释行
        if (line.empty() || line[0] == '#') {
            continue;
        }

        // 分割键和值
        size_t equalMarkPos = line.find('=');
        if (equalMarkPos != string::npos) {
            string key = line.substr(0, equalMarkPos);
            string value = line.substr(equalMarkPos + 1);
            keyValueList.emplace_back(key, value);
        }
    }

    inFile.close();
    // 后续处理vector逻辑...
    return 0;
}

如果一定要保留你原本用getline按=分割的逻辑,也可以把整行内容放进字符串流,再从流里拆分:

#include <sstream>

// ...(其余代码同上)
while (getline(inFile, line)) {
    if (line.empty() || line[0] == '#') {
        continue;
    }

    stringstream lineStream(line);
    string key, value;
    if (getline(lineStream, key, '=') && getline(lineStream, value)) {
        keyValueList.emplace_back(key, value);
    }
}

两种写法都能确保跳过所有#开头的整行,同时正确提取有效键值对。

内容的提问来源于stack exchange,提问作者Agustín Saenz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:20:33