c++中数字与string转换

您所在的位置:网站首页 c字符串转换成数字函数 c++中数字与string转换

c++中数字与string转换

2023-07-17 07:46| 来源: 网络整理| 查看: 265

网上流传的其他什么sstream,sprintf过于麻烦,提供便于记忆版本。

 

1.int->string

 

//头文件

//#include

//注意这个是string,没有c

//从C++11开始引入

 

std::to_string(int)

std::to_string(long)

std::to_string(long long)

std::to_string(float)

std::to_string(double)

std::to_string(long double)

还支持各类unsigned,基本上主流数值类型都能无脑转换

 

//转换时保留负号

//参考https://blog.csdn.net/lzuacm/article/details/52704931

//参考https://blog.csdn.net/u010510020/article/details/73799996

//http://www.cplusplus.com/reference/string/to_string/

 

2. string->int

 

//头文件

//#include

//标准库函数,但是使用时一般会配合

 

std::stoi

std::stol

std::stoll

//看名字就知道对应为int,long,long long

 

int stoi (const string& str, size_t* idx = 0, int base = 10) //idx是一个指针,该指针指向一个size_t类型的对象 //传入指针地址后,该对象的值会被修改为string中数值后的第一个字符所在位置 //例如stoi("123abcd",&p),返回的p指向a所在 //也可以把p的位置理解为数值部分的结束位置 //int base是进制基数,默认10进制没什么好说的 //需要注意的是stoi实质上是调用stol的

 

 

//值得一提的是,在使用过程中发现,stoi会自动将string数值部分的首位0消去

//同时还会保留负号,简直贴心,好评如潮

//例如sto("00123abc"),结果为123,自动消去首位无效0

//stoi("-0123"),结果为-123。 

 

//参考http://www.cplusplus.com/reference/string/stoi/

//参考http://www.cplusplus.com/reference/string/stol/

 

 

3.截取替换查找

 

下面的pos就是size_t类型的位置。

记得上面stoi(string, &p )吗

p是size_t类型的,其值会被修改数值后第一个字符所在位置(第一个字符为0)

亦即数值部分的结束位置。

 

例如:

size_t p;

stoi("123abc",&p);

str2 = s.substr(p); // 从p位置开始,输出"abc"

 

1. 截取子串 s.substr(pos, n) 截取s中从pos开始(包括0)的n个字符的子串,并返回 s.substr(pos) 截取s中从从pos开始(包括0)到末尾的所有字符的子串,并返回 2. 替换子串 s.replace(pos, n, s1) 用s1替换s中从pos开始(包括0)的n个字符的子串 3. 查找子串 s.find(s1) 查找s中第一次出现s1的位置,并返回(包括0) s.rfind(s1) 查找s中最后次出现s1的位置,并返回(包括0) s.find_first_of(s1) 查找在s1中任意一个字符在s中第一次出现的位置,并返回(包括0) s.find_last_of(s1) 查找在s1中任意一个字符在s中最后一次出现的位置,并返回(包括0) s.find_first_not_of(s1) 查找s中第一个不属于s1中的字符的位置,并返回(包括0) s.find_last_not_of(s1) 查找s中最后一个不属于s1中的字符的位置,并返回(包括0)

//参考https://blog.csdn.net/ezhou_liukai/article/details/13779091

 

 

4.string查找的一些说明

 

c++定义的重载find()有4种: string (1) size_t find (const string& str, size_t pos = 0) const; c-string (2) size_t find (const char* s, size_t pos = 0) const; buffer (3) size_t find (const char* s, size_t pos, size_t n) const; character (4) size_t find (char c, size_t pos = 0) const;

 

1.从str1的第p个位置开始查找str2

2.对c中char*形式字符串数组的兼容形式,效果同1

3.从str1的第pos个位置开始,查找str2的前n个字符,其中str2是char*类型

4.对单个字符char c的兼容形式,效果同1

 

 

特别的:

//s.find()查找不到时,返回一个特别的静态常量,在c++中被定义为std::string::npos;

//在vs2013中测试得到npos=4294967295,该值为unsigned int的理论最大值,转化为有符号即-1;

 

5.string替换的重载

//string (1) string& replace (size_t pos, size_t len, const string& str); string& replace (iterator i1, iterator i2, const string& str); //substring (2) string& replace (size_t pos, size_t len, const string& str, size_t subpos, size_t sublen); //c-string (3) string& replace (size_t pos, size_t len, const char* s); string& replace (iterator i1, iterator i2, const char* s); //buffer (4) string& replace (size_t pos, size_t len, const char* s, size_t n); string& replace (iterator i1, iterator i2, const char* s, size_t n); //fill (5) string& replace (size_t pos, size_t len, size_t n, char c); string& replace (iterator i1, iterator i2, size_t n, char c); //range (6) template string& replace (iterator i1, iterator i2, InputIterator first, InputIterator last);

 

//fill(5),意思是从pos开始的len长度的子串,被替换为n个字符c。跟insert一样,当对象为char时,需要额外指定char的重复次数。 

 

//参考http://www.cplusplus.com/reference/string/string/npos/

//参考http://www.cplusplus.com/reference/string/string/find/

//参考https://www.cnblogs.com/web100/archive/2012/12/02/cpp-string-find-npos.html

 

 

 

 

4.string 转 char[]的说明

不行开新文章了,直接更新在这。

 

4.1 string内置s.c_str(),返回一个const char*指针

string s="hello";

const char* p = s.c_str();

这是个临时指针,指向常量区某位置。修改s内容后,该指针不保证继续生效。

 

4.2 string 转 char[]

 

基本方法,逐位赋值。

可以用上面的.c_str(),拿到指针p后,逐位访问。不过string类本身也支持逐位访问。

这种方法显得比较蠢,而且还需要手动补结束符号。

string s = "hello"; char a[10]; int i; for(i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3