偶尔看别人代码突然发现C++11里标准库文件居然有string类型转数值类型的标准库函数,谁说只有python可以的? 再也不用自己写转换了 舒服啊
另外读取的时候甚至可以直接把东西都用字符串读取下来,然后配合标准库里提供的
find_first_of(target,start)
substr(start,size)
就可以实现任意的读取了
常用的转换函数有
stoi,stod等
转换的标准库函数在这里
https://blog.youkuaiyun.com/k346k346/article/details/50927002
既然写了就一下写完方便找
字符串转数值类型
1.上面的stoi,stod函数
#include <iostream>
#include <string>
using namespace std;
int main()
{
string a = "100";
int aa;
aa = stoi(a);
cout<<aa+1<<endl;
string b = "100.111";
float bb;
bb = stod(b);
cout<<bb+1<<endl;
return 0;
}
2.用sstream流对象,感觉有点像ros… 在两种不用的类型之间传输,通过流作为桥梁
这个用到 <sstream >
标准库,这里注意一个流对象用完之后要用clear清除之后才能继续用,不然会出错。
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
string a = "100";
int aa;
stringstream ss;
ss<<a;
ss>>aa;
cout<<aa+1<<endl;
ss.clear();
string b = "100.111";
float bb;
ss<<b;
ss>>bb;
cout<<bb+1<<endl;
return 0;
}
3.用标准库函数 sscanf() 要注意那里是传引用不是传值,而且这里是char[]类型,而不是string,string还是用上面两个
#include <iostream>
using namespace std;
int main()
{
char str[] = "1234";
int a;
sscanf(str,"%d",&a);
cout<<a+1<<endl;
return 0;
}
如果是char * 类型,用法差不多但是定义的时候要加上const,因为不能把一个非常量指针指向一个非常量。
数值类型转字符串
1.还是使用流对象实现,方法跟上面一样
2.用sprintf()函数
#include<iostream>
using namespace std;
int main()
{
int a = 1234;
char str[10];
sprintf(str,"%d",a);
cout<<str<<endl;
}
char * 和char[] string 互转
这块理解的不是很清楚,看看大佬的总结吧
https://www.cnblogs.com/Pillar/p/4206452.html
对象的定义
不同定义方法结果不同
i)类名 对象名
默认调用“对象名()”这个默认构造函数,在栈内存中存在对象名,在堆内存中存在实际对象;
如果类中没有声明构造函数,那么就会使用编译器自动产生的“合成的默认构造函数”,如果有其他构造函数(例如有参数的),编译器不会自动生成,这里会报错。“合成的默认构造函数”会以初始值、和默认初始值来定义数据成员。
ii)类名 对象名(一个或以上个参数)
默认调用相应的构造函数,在栈内存中存在对象名,在堆内存中也是存在实际对象的;
iii)类名 对象名()
实际是声明了一个返回类型为类的函数。。。而不是对象名,所以其实这里是函数名
C++风格强制转换
static_cast< double > (要转换的变量) ,在C风格中是(* double)
double time0 = static_cast<double> (getTickCount())
C++ 产生各种随机数
产生随机数
rand()%(b-a+1)+a 表示产生一个从a到b的随机数
定义随机数生成器
RNG& rng = theRNG()