C++如何将文件中的紧凑字符串拆分为单个整数存入vector?
解决方案
你需要遍历字符串中的每一个字符,将其转换为对应的整数值后存入std::vector<int>。以下是完整的实现代码:
#include <iostream> #include <fstream> #include <string> #include <vector> #include <cctype> int main() { std::ifstream file("my_file_with_numbers"); if (!file.is_open()) { std::cerr << "无法打开目标文件" << std::endl; return 1; } std::string line; // 逐行读取文件,getline可确保读取完整一行,避免因空格截断内容 while (std::getline(file, line)) { std::vector<int> digits; // 遍历字符串中的每个字符 for (char c : line) { // 仅处理数字字符,提升代码健壮性 if (std::isdigit(c)) { // 字符转整数:利用ASCII码差值,'0'的ASCII值为48,直接相减得到对应数值 digits.push_back(c - '0'); } } // 示例:打印转换后的结果 std::cout << "转换后的数字列表:"; for (int num : digits) { std::cout << num << " "; } std::cout << std::endl; } file.close(); return 0; }
核心要点说明:
- 字符转整数逻辑:ASCII表中数字字符
'0'到'9'是连续排列的,通过c - '0'可直接将字符形式的数字转换为对应整数,比如'7' - '0'的结果就是整数7。 - 文件读取优化:用
std::getline替代file >> line,能确保读取完整一行内容,适配可能存在的行首空格场景(若你的文件行都是纯数字,两种方式均可)。 - 合法性校验:添加
std::isdigit(c)判断,避免非数字字符导致的转换错误,让代码更健壮。
如果仅需处理单行测试,可简化为:
std::string line = "7190007400050083"; std::vector<int> digits; for (char c : line) { digits.push_back(c - '0'); }
内容的提问来源于stack exchange,提问作者Henrik Hillestad Løvold
相关产品推荐
相关产品推荐

