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
的灵活性和传统数组的需求,确保高效处理未知数量的输入。