matlab里字符转化为数字格式化,C++:(小技巧)使用内核格式化轻松地把数字转化成字符串,字符串转化成数字...

本文介绍如何在C++中使用istringstream和stringstream类实现字符串与数值间的转换,包括具体的代码示例,适用于不同场景的数据处理需求。

Contents

前言内核格式化简单介绍使用实例字符串转化为数值数值转化为字符串总结

前言

前几天给实验室做的东西需要提取一个复杂文本中的数据,其实也不算复杂,还是有规律的文本。

如下图,红框框起来的部分是我需要提取的,红框上端和左端的1-10是传感器的序号,也就是说我要提取这里面的10*10的矩阵。

而且提取这个矩阵仅是其中的一步,当矩阵提取出来后,我们还要根据输入的激励传感器和响应传感器的数量来提取矩阵中的某一部分,

而且也不一定是10个传感器,可能换一个文本就变成了20个甚至30个传感器了!

9c1293a699ed4731f67cfcb91b23b4ea.png

至于如何提取出这个矩阵的的问题,在下期中我用MATLAB来介绍一下方法,就不介绍用C++怎么做了,反正都是用的都是正则。不过还是先展示一下用C++做的结果吧:

7eab6c639bc544c4d4966cf07ffc8130.gif

只是做了一个例子用来测试一下。

回到本推送的主题:在C++中我用正则提取出来的仅仅是一个数字字符串,并不是一个double,而我们在进行计算的时候是需要把它转化成一个double的。在C++中,字符串到数字之间的转化有好几种方法,本推送中介绍一种我经常用的方法:内核格式化!也算是一个小技巧

内核格式化

简单介绍

内核格式化就是:读取string对象中的格式化信息,或将格式化信息写入string对象中。

要使用内核格式化需要包含一个头文件:

#include 

sstream:表示 String Stream,字符串流。

ostringstream:类似于cout(其实应该说是类似于ostream,但是cout好理解),它是把变量的值流入到输出字符串流中,重载了operator<

istringstream:类似于cin(其实应该说是类似于istream,但是cin好理解),它是把输入字符串流中的值流入到变量中,重载了operator>>()

stringstream:类似于iostream。它既可以流入也可以流出。因为它既重载了operator<>()

使用实例

接下来将针对对:数值转化为字符串,字符串转化为数值来说一下上面这三个类怎么用的

字符串转化为数值

使用 istringstream类

#include 

#include 

#include 

using std::cout;

using std::endl;

using std::string;

using std::istringstream;

int main(){

//*****************使用 istringstream 来完成字符串到数值的转化!

string str_num1 = "66.666";

double num1;

//用一个字符串来构造一个istringstream类对象

istringstream iss(str_num1);

//把istringstream类对象中的值流出到num1中,如此便把字符串转化为数值了

iss >> num1;

cout <

return 0;

}

结果:

f589d502df835809fffa10523acf3463.png

使用stringstream类

#include 

#include 

#include 

using std::cout;

using std::endl;

using std::string;

using std::stringstream;

//using std::istringstream;

//using std::ostringstream;

int main(){

//*****************使用 stringstream 来完成字符串到数值的转化!

string str_num1 = "66.666";

double num1;

//创建一个stringstream类对象

stringstream ss;

//把 字符串str_num1 流入到 stringstream类对象 ss 中

ss <

//把 stringstream类对象 中的值流出到num1中,如此便把字符串转化为数值了

ss >> num1;

cout <

return 0;

}

结果:

5dcd4a10c1bcc50a9d023679b1449cd6.png

Note: ostringstream不能用于把字符串转化为数值!

数值转化为字符串

使用ostringstream类

#include 

#include 

#include 

using std::cout;

using std::endl;

using std::string;

using std::ostringstream;

int main(){

//*****************使用 ostringstream 来完成数值到字符串的转化!

string str_num1;

double num1 = 88.888;

//创建一个ostringstream类对象

ostringstream oss;

//把 数值 num1 流出到 ostringstream类对象 oss 中

oss <

//调用 ostringstream类对象 的str()方法输出字符串!

str_num1 = oss.str();

cout <

return 0;

}

结果:

6e5e99301518455d5927a1dc06f051af.png

使用stringstream类

#include 

#include 

#include 

using std::cout;

using std::endl;

using std::string;

using std::stringstream;

int main(){

//*****************使用 stringstream 来完成数值到字符串的转化!

string str_num1;

double num1 = 88.888;

//创建一个 stringstream 类对象

stringstream ss;

//把 数值 num1 流出到 stringstream类对象 ss 中

ss <

//把 stringstream类对象 中的东西 流入到  str_num1 中

ss >> str_num1;

cout <

return 0;

}

结果:

0e6b07bce92316cdc2f165bd8cc53732.png

总结

对比上面这四段代码,发现还是 stringstream 好用,直接流入再流出便能达到我们想要的结果。

如果想把字符串转化为数值,就把字符串流入到 stringstream 对象中,再从 stringstream 对象中流出到存放数值的变量中

如果想把数值转化为字符串,就把数值流入到 stringstream 对象中,再从 stringstream 对象中流出到存放字符串的变量中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值