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