C/C++数字与字符串互相转换

C/C++数字与字符串互相转换

前言:

在C/C++程序中,会需要把数字与字符串做出互相转换的操作,用于实现程序想要的效果。下面将介绍多种方法实现数字与字符串互相转换。

字符串转为数字

一、利用ASCII

我们知道每个字符都有一个ASCII码,利用这一点可以将字符-'0'转为数字。在字母大小写转换时也可以利用这个性质。

#include<iostream> #include<cstring> using namespace std; char ch[]={'1','2','3','4','5'}; int main(){ for(int i=0;i<strlen(ch);i++){ cout<<ch[i]-'0'<<" "; } return 0; }

 输出int类型的1,2,3,4,5


二、stoi()

stoi函数是C++标准库中的一个函数,用于将字符串转换为整数,针对于string类型的。stoi函数是C++11引入的,因此只有在C++11及以上的版本中才能使用该函数。如果你的编译器版本较老,不支持C++11,那么就无法使用stoi函数。学校机房的dev-C++一般是C98标准的,需要自己手动改成C11。

int num=stoi(const string& str, size_t* idx = 0, int base = 10); 

其中,str是需要转换的字符串;idx是一个指向size_t类型的指针,用于保存转换结束的位置;base是进制,默认为10进制。一般只给传第一个参数即可,也可以利用此函数实现进制转换。

类似的还有stol()、stof()、stod(),分别将字符串类型转换成long long、float、double类型。

#include<iostream> #include<cstring> using namespace std; string s="12345"; int main(){ int a=stoi(s); long long b=stol(s); double c=stod(s); float d=stof(s); cout<<"int:"<<a<<endl; cout<<"long long:"<<b<<endl; cout<<"double:"<<c<<endl; cout<<"float:"<<d<<endl; return 0; } 

三、atoi()

atoi()函数是C语言中的一个函数,主要用于将字符串转换为整数。针对于字符数组,类似的还有atol()、atof()、atod()。

int num=atoi(const char *str); 

其中,str是一个以null结尾的字符串,表示要转换的整数。

该函数将从字符串的开头开始解析,直到遇到第一个非数字字符为止。如果开头是一个正号或负号,它也会解析为整数的一部分。如果字符串中的第一个非空格字符不是有效的数字字符或正负号,则返回0。

#include<iostream> #include<cstring> using namespace std; char s1[]="12345"; char s2[]="qwe"; int main(){ int a=atoi(s1); long long b=atol(s2); cout<<"int:"<<a<<endl; cout<<"long long:"<<b<<endl; return 0; } 

四、sscanf()

sscanf函数是一个用来将字符串按照指定格式解析的函数。它接受一个输入字符串和一个格式字符串作为参数,并根据格式字符串的指示将字符串中的数据解析为对应的变量中。主要是针对于字符数组。

sscanf(str,"%d",&num);//str字符数组,%dint类型,num转换完成数字

代码应用如下:

#include<iostream> #include<cstring> using namespace std; char s1[]="12345"; char s2[]="qwe"; int main(){ int a; long long b; sscanf(s1,"%d",&a); sscanf(s2,"%lld",&b);//转字母会成乱码 cout<<"int:"<<a<<endl; cout<<"long long:"<<b<<endl; return 0; } 

五、stringstream

stringstream是C++中的一个类,可以用来对字符串进行输入输出操作。它是基于字符串的流,可以用来将字符串转换为其他类型的数据,以及将其他类型的数据转换为字符串。stringstream类的头文件是<sstream>,我们需要包含这个头文件才能使用stringstream类。

#include<iostream> #include<sstream> #include<cstring> #include<typeinfo> using namespace std; int main(){ stringstream ss; string s="12345"; int num; ss<<s;//将字符串读入字符串流 ss>>num;//从字符串流中读取数据转换为整数 cout<<typeid(num).name()<<" "<<num<<endl; return 0; }

数字转为字符串

一、利用ASCII

字符转数字可以-'0',数字转字符那么就可以+'0',还是利用了ASCII码值的特性。

#include<iostream> #include<cstring> using namespace std; int nums[]={1,2,3,4,5}; int main(){ for(int i=0;i<sizeof(nums)/sizeof(int);i++){ cout<<nums[i]+'0'<<" "; } return 0; }

注意:转换结果为49 50 51 52 53 ,对应ASCII码值,因为原理就是用ASCII码转换的。


一、to_string()

to_string函数是C++标准库提供的一个函数,用于将不同类型的数据转换为字符串。可以将int、float、double、long long等类型转换为string类型。需要包含头文件#include<cstring>

#include<iostream> #include<cstring> using namespace std; int a=24; long long b=12345678; double c=3.1415; string s; int main(){ s=to_string(a); cout<<s<<endl; s=to_string(b); cout<<s<<endl; s=to_string(c); cout<<s<<endl; return 0; }

二、itoa()

itoa函数用于将整数转换为字符串。类似的还有ltoa、ftoa、dtoa分别将long long、float、double转换为字符串类型。针对于字符数组。

itoa(num,str,10);

第一个参数是待转换的数字,第二个参数是转换完成的字符数组,第三个是转换的进制数,默认10进制。

#include<iostream> #include<cstring> using namespace std; int n=12345; char str[10]; int main(){ itoa(n,str,10); cout<<str<<endl; return 0; }

 结果为12345


三、sprintf()

sprintf()函数是c语言库中的函数,可以将数字转换为字符串类型,一般转换为字符数组。

sprintf(str,"%d",num); 

str是转换完成的字符数组,%d是类型,num是待转换的数字。 

#include<iostream> #include<cstring> using namespace std; int n=12345; char str[10]; int main(){ sprintf(str,"%d",n); cout<<str<<endl; return 0; }

结果为:12345


 四、stringstream

与字符串转数字的一样,可以互相转换,同时还是要包含头文件<sstream>,具体使用如下

#include<iostream> #include<sstream> #include<cstring> #include<typeinfo> using namespace std; int main(){ stringstream ss; string s="12345"; int num=54321; ss<<num;//将int类型的数据写入字符串流中 s=ss.str();//将字符串流中的数据转换为string类型 cout<<typeid(s).name()<<" "<<num<<endl; return 0; }


本篇到此为止,感谢大家支持。

Read more

FPGA开发常用软件盘点:Vivado、Quartus、ModelSim全面对比

FPGA开发常用软件盘点:Vivado、Quartus、ModelSim全面对比

在FPGA开发过程中,EDA工具(Electronic Design Automation) 是工程师的生产力核心。不同厂商的FPGA芯片通常配套不同的开发工具,但在项目实践中,很多工程师往往会接触多种EDA软件。 本文将带你系统梳理三款FPGA开发中最常用的软件:Vivado、Quartus、ModelSim,从功能、适用场景、优缺点等多个维度进行全面对比,助你快速入门并合理选择。 一、Vivado —— Xilinx官方旗舰开发平台 1. 基本简介 Vivado是Xilinx(现为AMD)推出的综合性FPGA开发环境,主要面向7系列、UltraScale、Versal等高端FPGA器件。 它集成了综合、布局布线、时序分析、仿真、硬件调试等完整流程,是Xilinx FPGA开发的首选工具。 2. 核心功能 * RTL综合与实现:支持Verilog、VHDL和SystemVerilog,自动进行逻辑优化与布局布线。 * IP Integrator:可视化模块连接工具,适合SoC级设计。 * 仿真与调试:内置Vivado Simulator,也可外接ModelSim进行

By Ne0inhk

一、FPGA到底是什么???(一篇文章让你明明白白)

一句话概括 FPGA(现场可编程门阵列) 是一块可以通过编程来“变成”特定功能数字电路的芯片。它不像CPU或GPU那样有固定的硬件结构,而是可以根据你的需求,被配置成处理器、通信接口、控制器,甚至是整个片上系统。 一个生动的比喻:乐高积木 vs. 成品玩具 * CPU(中央处理器):就像一个工厂里生产好的玩具机器人。它的功能是固定的,你只能通过软件(比如按不同的按钮)来指挥它做预设好的动作(走路、跳舞),但你无法改变它的机械结构。 * ASIC(专用集成电路):就像一个为某个特定任务(比如只会翻跟头)而专门设计和铸造的金属模型。性能极好,成本低(量产时),但一旦制造出来,功能就永远无法改变。 * FPGA:就像一盒万能乐高积木。它提供了大量基本的逻辑单元(逻辑门、触发器)、连线和接口模块。你可以通过“编程”(相当于按照图纸搭建乐高)将这些基本模块连接起来,构建出你想要的任何数字系统——可以今天搭成一个CPU,明天拆了重新搭成一个音乐播放器。 “现场可编程”

By Ne0inhk

2026年RAG技术路线图:基于DeepSeek与Neo4j知识图谱构建企业智能体系

RAG的演进:为何图检索增强生成(GraphRAG)将主导2026年 检索增强生成(RAG)自问世以来经历了深刻变革,2026年标志着其向图检索增强生成(GraphRAG)范式的关键性转变。这一演进源于传统平面向量型RAG在满足企业级复杂推理和可靠决策支持需求方面日益凸显的局限性。 这一转型的核心驱动力是从平面向量相似性向复杂关系推理的跨越。传统RAG依赖向量嵌入来衡量查询与文档片段的语义相似性,但这种方法无法捕捉企业决策至关重要的实体、概念与事件间的复杂关联。相比之下,GraphRAG将信息构建为包含节点(实体)和边(关系)的知识图谱,使模型能够遍历并推理这些关联——解锁了平面向量RAG无法实现的多跳推理和上下文关系理解能力。 GraphRAG还解决了传统RAG的两大长期痛点:上下文窗口限制和“中间信息丢失”问题。随着企业查询日益复杂,需要更大的上下文窗口来整合相关信息,但即便是最先进的大语言模型(LLM)也存在有限的上下文容量。GraphRAG通过将结构化知识存储在外部图数据库中解决了这一问题,允许模型按需检索最相关的节点和关系,而非将大量文本塞入上下文窗口。此外,“中间信息

By Ne0inhk
保姆级教程:从零搭建AI系统权限控制系统

保姆级教程:从零搭建AI系统权限控制系统

保姆级教程:从零搭建AI系统权限控制系统 手把手教你,如何在3小时内搭建完整的AI权限安全架构,避免Meta式的数据“裸奔”事故 前言:为什么要学这个? 2026年3月22日,Meta AI发生重大数据泄露事故——敏感数据“全员可见”2小时。如果你也正在开发AI项目,这种事故也可能发生在你身上。 本教程将带你从零开始,一步步搭建一个完整的、可实战的AI权限控制系统。无论你是个人开发者、小团队,还是大型AI项目,都能直接应用。 预计完成时间: 3小时 所需技能: 基础Python、Linux命令行、Git 第一阶段:准备工作(15分钟) 第1步:环境准备 # 1. 安装Python和相关依赖 pip install casbin flask sqlalchemy redis # 2. 安装数据库(推荐PostgreSQL) sudo apt-get install postgresql

By Ne0inhk