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

如何从文件单行中拆分含特殊字符的名称与末尾整数?

实现每行名称与末尾整数的分离(C++)

需求很明确:把文件每行里的名称部分(可能包含空格、连字符、数字)存入string变量,每行末尾的整数存入int变量。核心思路是抓住「最后一个空格」作为分隔点——空格前面的所有内容是名称,后面的是目标整数。

实现代码

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>

int main() {
    std::ifstream inputFile("your_file.txt"); // 替换成你的文件名
    std::string line;

    while (std::getline(inputFile, line)) {
        // 找到最后一个空格的位置
        size_t lastSpacePos = line.find_last_of(' ');
        if (lastSpacePos == std::string::npos) {
            // 跳过格式异常的行(无空格的行)
            continue;
        }

        // 提取名称和末尾整数
        std::string name = line.substr(0, lastSpacePos);
        int a = std::stoi(line.substr(lastSpacePos + 1));

        // 输出结果(可根据需求替换为存入容器等操作)
        std::cout << "int a = " << a << "\n";
        std::cout << "string name = \"" << name << "\"\n\n";
    }

    inputFile.close();
    return 0;
}

代码说明

  1. 逐行读取:用std::getline读取整行内容,避免被空格分割的问题。
  2. 定位分隔点:find_last_of(' ')精准找到每行最后一个空格的位置,这是名称和整数的分界。
  3. 内容提取:
    • substr(0, lastSpacePos)截取开头到最后一个空格前的所有字符,作为名称。
    • substr(lastSpacePos + 1)截取空格后的字符串,用std::stoi转换为int类型。
  4. 异常兼容:遇到无空格的异常行直接跳过,避免程序崩溃。

测试原问题文本

用你提供的原问题文本测试,输出结果如下:

int a = 4
string name = "Cap-de-bour"

int a = 10
string name = "Romania 100"

int a = 7
string name = "Cap-de-bour"

int a = 4
string name = "Cap-de-bour"

int a = 5
string name = "Romania 100"

int a = 5
string name = "Romania 100"

int a = 5
string name = "Romania 100"

int a = 15
string name = "CRACIUN 2018"

int a = 10
string name = "Romania 100"

内容的提问来源于stack exchange,提问作者Mile

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 11:47:37