C++算法(13):如何高效读取并存储未知数量的空格分隔数字
1. 读取整行输入
使用 getline 读取用户输入的一行数据,确保捕获所有数字。
2. 使用字符串流分割数字
将读取的字符串转换为 istringstream 对象,逐个提取其中的数字。
3. 动态存储数字到向量
利用 vector 动态存储提取的数字,避免预先分配固定大小的数组。
4. 转换为整型数组
根据向量的大小动态分配整型数组,并将数据复制到数组中。
完整代码示例
#include <iostream>
#include <sstream>
#include <vector>
#include <string>using namespace std;int main() {string inputLine;vector<int> numbers;// 读取整行输入getline(cin, inputLine);// 使用字符串流解析数字istringstream iss(inputLine);int num;while (iss >> num) {numbers.push_back(num);}// 转换为整型数组int* arr = new int[numbers.size()];for (int i = 0; i < numbers.size(); ++i) {arr[i] = numbers[i];}// 输出数组内容(示例)cout << "存入数组的数字为:";for (int i = 0; i < numbers.size(); ++i) {cout << arr[i] << " ";}cout << endl;// 释放动态数组内存delete[] arr;return 0;
} 
代码解析
-  读取输入: getline(cin, inputLine)读取整行输入,包括空格。
-  字符串流处理: istringstream将字符串转换为流,便于逐个提取数字。
-  动态存储: vector<int>自动扩展容量,无需手动管理内存。
-  数组转换:根据 vector大小动态分配数组,并复制数据。
注意事项
-  内存管理:使用 new分配数组后,需用delete[]释放内存。
-  错误处理:代码假设输入均为合法整数,若需处理非法字符,可添加校验逻辑。 
示例输入/输出
输入:10 20 30 40 50 输出:存入数组的数字为:10 20 30 40 50
此方法结合了 vector 的灵活性和传统数组的需求,确保高效处理未知数量的输入。


