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;
}

代码解析

  1. 读取输入getline(cin, inputLine) 读取整行输入,包括空格。

  2. 字符串流处理istringstream 将字符串转换为流,便于逐个提取数字。

  3. 动态存储vector<int> 自动扩展容量,无需手动管理内存。

  4. 数组转换:根据 vector 大小动态分配数组,并复制数据。

注意事项

  • 内存管理:使用 new 分配数组后,需用 delete[] 释放内存。

  • 错误处理:代码假设输入均为合法整数,若需处理非法字符,可添加校验逻辑。

示例输入/输出

输入:10 20 30 40 50
输出:存入数组的数字为:10 20 30 40 50

此方法结合了 vector 的灵活性和传统数组的需求,确保高效处理未知数量的输入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值