首页 > 其他分享 >stoi函数介绍

stoi函数介绍

时间:2024-11-16 14:18:44浏览次数:1  
标签:std 函数 int 介绍 stoi 字符串 include string

stoi 是 C++ 标准库中的一个函数,定义在头文件 <string> 中,它用于将字符串转换为整数类型。

函数原型

int stoi(const std::string& str, size_t* idx = 0, int base = 10);
  • str(必选):要转换的字符串,必须以数字开头(可以包含正负号)。

    插一句题外话

    如果不以数字开头,会这样:

    img

  • idx(可选):用来存储解析结束的位置(字符串中第一个非数字字符的索引)。如果不需要这个信息,可以传入 nullptr 或省略。

  • base(可选):数字的进制,默认值为 10(十进制)。支持 2-36 的进制转换(注意是将base指定的进制转换为十进制,后面的常见用法里面会举一个相关的例子)。

功能描述

  • 将字符串转换为整数。如果字符串中有非法字符,stoi 会抛出异常。

  • 字符串可以包含前导空格和符号(+ 或 -)。

  • 转换以第一个非数字字符或字符串末尾结束。

常见用法

1. 基本转换

将字符串转换为整数:

#include <iostream>
#include <string>

int main() {
    std::string s = "123";
    int num = std::stoi(s);
    std::cout << "整数值: " << num << std::endl; // 输出: 123
    return 0;
}

2. 转换含符号的数字

可以处理正负号:

#include <iostream>
#include <string>

int main() {
    std::string s1 = "-456";
    std::string s2 = "+789";
    int num1 = std::stoi(s1);
    int num2 = std::stoi(s2);
    std::cout << num1 << ", " << num2 << std::endl; // 输出: -456, 789
    return 0;
}

3. 提取部分字符串

使用 idx 提取未转换的部分:

#include <iostream>
#include <string>

int main() {
    std::string s = "123abc";
    size_t idx;
    int num = std::stoi(s, &idx);
    std::cout << "整数值: " << num << std::endl;       // 输出: 123
    std::cout << "未转换部分: " << s.substr(idx) << std::endl; // 输出: abc
    return 0;
}

4. 转换不同进制的数字

支持其他进制(例如二进制、十六进制等):

#include <iostream>
#include <string>

int main() {
    std::string binary = "1010";  // 二进制字符串
    std::string hex = "1F";       // 十六进制字符串

    int num1 = std::stoi(binary, nullptr, 2); // 二进制转换
    int num2 = std::stoi(hex, nullptr, 16);   // 十六进制转换

    std::cout << "二进制转整数: " << num1 << std::endl; // 输出: 10
    std::cout << "十六进制转整数: " << num2 << std::endl; // 输出: 31
    return 0;
}

异常处理

stoi 会抛出以下异常:

  • std::invalid_argument:当字符串不包含任何数字时(如 "abc")。

  • std::out_of_range:当结果超出 int 类型的范围。

举个例子

#include <iostream>
#include <string>

int main() {
    try {
        std::string invalid = "abc";
        int num = std::stoi(invalid); // 抛出 std::invalid_argument
    } catch (const std::invalid_argument& e) {
        std::cout << "无效输入: " << e.what() << std::endl;
    }

    try {
        std::string too_large = "9999999999999999999";
        int num = std::stoi(too_large); // 抛出 std::out_of_range
    } catch (const std::out_of_range& e) {
        std::cout << "超出范围: " << e.what() << std::endl;
    }

    return 0;
}

输出如下:

img

注意事项

  • stoi 只能处理整数。如果需要转换浮点数,使用 std::stofstd::stod

  • stoi 是基于 std::strtol 实现的,但比 std::strtol 更易用。

标签:std,函数,int,介绍,stoi,字符串,include,string
From: https://www.cnblogs.com/hisun9/p/18549333

相关文章

  • 【ARM CoreLink 系列 1 -- SoC 架构 总线 互联(interconnect) 介绍】
    概述在摩尔定律的推动下,集成电路工艺取得了高速发展,单位面积上的晶体管数量不断增加。片上系统(System-on-Chip,SoC)具有集成度高、功耗低、成本低等优势,已经成为大规模集成电路系统设计的主流方向,解决了通信、图像、计算、消费电子等领域的众多挑战性的难题。随着片上系统SoC的应......
  • 【GraphRAG】本地部署全流程!超详细介绍!
    1、GraphRAG是什么?GraphRAG(Graph-basedRelation-AwareGrouping)是一种基于图的关系感知分组方法,通常用于计算机视觉和机器学习领域。它的核心思想是利用图结构来表示和处理实体之间的关系,从而更有效地进行分组和识别任务。2、本地部署在autodl上进行运行,4090单显卡+24GB内......
  • 统信 UOS 操作系统介绍
    一、前言近年来,软件国产化的呼声越来越高,而操作系统国产化是软件国产化过程中核心的一环,自然也不例外。目前国产操作系统有统信UOS、麒麟(Kylin)和openEuler等,本篇文章为大家介绍统信UOS操作系统,主要包括统信UOS简介版本介绍选择建议与系统展示总结二、统信UOS简介......
  • django 数据库ORM通用的公共函数
    通用查询1、公共函数:defgeneric_query(model,filter_kwargs=None,order_by=None,limit=None,aggregate=None,annotate=None):"""通用的DjangoORM查询函数。:parammodel:Django模型类:paramfilter_kwargs:过滤条件字典:paramorder_by:......
  • 云计算&虚拟化-kvm介绍&安装
    作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。虚拟化,简单来说就是把一台服务器/PC电脑,虚拟成多台独立的虚拟机,每台虚拟机之间相互隔离,每个虚拟机都有自己独立的操作系统,磁盘,网络资源。虚拟化是一......
  • elastic search 原理介绍
    Elasticsearch原理与实现文档字段1字段索引默认情况下,只有text类型的字段会保存文档ID、词频、词序以外,其余类型字段均只保存文档ID。用户可以在映射字段时通过index_option参数来设置,它的可选值为docs、freqs、positions、offsets,编入索引l的信息依次增加,具体含义如下:do......
  • HTTP协议介绍
    HTTP协议介绍一、HTTP-概述概念:HyperTextTransferProtocol,超文本传输协议,规定了浏览器和服务器之间数据传输规则。特点:1、基于TCP协议:面向连接,安全2、基于请求-响应模型的:一次请求对应一次响应3、HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应......
  • 关于在Reverse函数中不能使用L=s而是*L=*s的原因分析
    完整代码地址:https://blog.csdn.net/2301_76819732/article/details/143807340?spm=1001.2014.3001.5502如果使用L=s;的话,当输出结果时,会发现内容为空。我感到很奇怪,按照我的设想,L=s;会把s指向的地址赋给L。但现在这个情况肯定是失败的了。我随便试了一试,发现如果......
  • 淘宝代购系统;海外代购系统;代购程序,代购系统源码PHP介绍
    以下是关于淘宝代购系统、海外代购系统、代购程序以及代购系统源码PHP的相关介绍:——在成长的路上,我们都是同行者。这篇关于搭建1688淘宝代购集运系统搭建的文章,希望能帮助到您。期待与您继续分享更多跨境系统搭建的知识,请记得关注Taobaoapi2014哦!  淘宝代购系统:......
  • RTP --- 协议介绍
     RTP报文格式12字节头部+payload12字节头部structrtp_hdr{#ifdefBIGENDIANunsignedcharv:2;/*protocolversion*/unsignedcharp:1;/*paddingflag*/unsignedcharx:1;/*headerextensionflag*/un......