如何从文件单行中拆分含特殊字符的名称与末尾整数?
实现每行名称与末尾整数的分离(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; }
代码说明
- 逐行读取:用
std::getline读取整行内容,避免被空格分割的问题。 - 定位分隔点:
find_last_of(' ')精准找到每行最后一个空格的位置,这是名称和整数的分界。 - 内容提取:
substr(0, lastSpacePos)截取开头到最后一个空格前的所有字符,作为名称。substr(lastSpacePos + 1)截取空格后的字符串,用std::stoi转换为int类型。
- 异常兼容:遇到无空格的异常行直接跳过,避免程序崩溃。
测试原问题文本
用你提供的原问题文本测试,输出结果如下:
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
相关产品推荐
相关产品推荐

