C++入门者技术需求:从输入流提取数据至整数与字符串数组
实现输入流数据的类型分离(整数/字符串数组)
嘿,刚入门C++就搞数据处理,不错嘛!针对你要把输入里的价格和描述分别存到数组的需求,我给你整理了一个清晰的实现方案,一步步来~
核心思路
- 先逐行读取输入内容(不管是从控制台还是文件)
- 对每一行,先提取开头的整数价格,剩下的全部内容作为描述字符串
- 用
vector来存储数据(比静态数组灵活,不用提前知道行数,入门阶段更省心)
完整代码示例
#include <iostream> #include <vector> #include <string> #include <sstream> #include <fstream> // 读取文件时需要这个头文件 using namespace std; int main() { // 定义存储价格和描述的动态容器(相当于自动扩容的数组) vector<int> priceArray; vector<string> descArray; string currentLine; // --- 二选一:选择输入方式 --- // 方式1:读取控制台输入 // istream& input = cin; // 方式2:读取本地文件(替换成你的文件名) ifstream inputFile("input_data.txt"); if (!inputFile.is_open()) { cerr << "哎呀,打不开输入文件!检查下路径对不对~" << endl; return 1; } istream& input = inputFile; // 逐行处理输入内容 while (getline(input, currentLine)) { // 把当前行转成可拆分的输入流,方便提取数据 istringstream lineStream(currentLine); int price; // 先尝试读取开头的整数价格 if (lineStream >> price) { priceArray.push_back(price); // 跳过价格后面的空格,读取剩下的全部内容作为描述 string description; getline(lineStream >> ws, description); descArray.push_back(description); } else { // 遇到格式错误的行,打印警告并跳过 cerr << "警告:这行格式有问题,跳过啦:" << currentLine << endl; } } // 可选:验证提取结果是否正确 cout << "\n提取到的价格数组:" << endl; for (int p : priceArray) { cout << p << " "; } cout << "\n\n提取到的描述数组:" << endl; for (const string& desc : descArray) { cout << "- " << desc << endl; } // 如果是读取文件,记得关闭文件流 if (inputFile.is_open()) { inputFile.close(); } return 0; }
关键细节解释
getline(input, currentLine):保证每次读取完整的一行,不会被空格截断,完美适配你的输入格式istringstream:把字符串转换成输入流,这样就能用>>运算符轻松提取开头的整数lineStream >> ws:这个细节很重要!它会跳过价格后面的所有空白字符(空格、制表符等),确保getline能读到完整的描述,不然会得到空字符串vector:不用提前定义数组大小,新增数据直接用push_back,避免了新手容易踩的数组越界坑
测试效果
比如输入内容是:
5000 Leather Seats 1000 DVD System 800 10 Speakers
程序会输出:
提取到的价格数组: 5000 1000 800 提取到的描述数组: - Leather Seats - DVD System - 10 Speakers
内容的提问来源于stack exchange,提问作者Ben Bowald
相关产品推荐
相关产品推荐

