当前位置: 首页 > news >正文

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

相关文章:

  • C语言高频面试题——sizeof和strlen的区别
  • 进程的同步和互斥
  • Seata 分布式事务 快速开始
  • Crawl4AI:打破数据孤岛,开启大语言模型的实时智能新时代
  • 597页PPT丨流程合集:流程梳理方法、流程现状分析,流程管理规范及应用,流程绩效的管理,流程实施与优化,流程责任人的角色认知等
  • Docker Compose常用命令
  • 公路路面病害检测
  • 数据结构:顺序表的实现
  • 使用 Spring Boot Admin 通过图形界面查看应用配置信息的完整配置详解,包含代码示例和注释,最后以表格总结关键配置
  • 使用 rebase 轻松管理主干分支
  • 描述城市出行需求模式的复杂网络视角:大规模起点-目的地需求网络的图论分析
  • 数据仓库ODS、DWD、DWS、ADS各层介绍
  • 关于创建UNIX/Linux daemon进程的笔记
  • 【漫话机器学习系列】217.监督式深度学习的核心法则(Supervised Deep Learning Rule Of Thumb)
  • Spark-Streaming简介和核心编程
  • 【盈达科技GEO优化】向量数据库:人工智能营销时代的核心引擎
  • 【信息安全工程师备考笔记】第二章 网络信息安全概述
  • 门控循环单元(GRU)
  • 基于机器学习的房租影响因素分析系统
  • 力扣面试150题--有效的括号和简化路径
  • 金隅集团:今年拿地将选择核心热门地块,稳健审慎投资
  • 马上评丨喷淋头全是摆设,酒店消防岂能“零设防”
  • 王旭任甘肃省副省长
  • 美称中美贸易谈判仍在进行中,外交部:美方不要混淆视听
  • 网络达人“拿”别人的视频为自己带货赚佣金,法院判决赔偿1.4万元
  • 猿辅导回应一员工离世:发生意外期间其所在团队没有安排加班