C++11增加了全局函数std::to_string
#include
int a = 5;
string s = std::to_string(a);
/**除了int转string之外,还有其他类型转string*/
string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);
有三种方法:
/**对于其他类型也都有相应的标准函数,比如浮点型atof(),long型atol()*/
/**如果字符串中含有数字之外的符号,那么a的值会是0,也就是atoi返回0*/
/**c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同,把字符串的'\0'去掉了*/
string s = "12";
int a = atoi(s.c_str());
拿std::stoi举例
/**s中含有十进制数字之外的字符,编译能通过但是运行会报错*/
string s = "12";
int a = stoi(s);
string s = "2001, A Space Odyssey";
string::size_type sz;
int m_dec = stoi(s,&sz);///<只取 string中 前sz个字符 转换为 int
/**sz智能判断 string中 最前面连在一起的字符是否 10进制数,是的话,将该十进制数所占的字符个数返回给sz(eg:此题,sz=4)*/
string str_bin = "10010110001";
int i_bin = std::stoi(str_bin,nullptr,2);///<2进制
string str_hex = "40c3";
int i_hex = stoi (str_hex,nullptr,16);///<16进制
string str_auto = "0x7f";
int i_auto = std::stoi (str_auto,nullptr,0);///<智能判断进制
#include
istringstream is("12"); ///<构造输入字符串流,流的内容初始化为“12”的字符串 ,头文件 sstream.h
int i;
is >> i; //从is流中读入一个int整数存入i中
string s = "11111111111111111111111101101100";
cout << "s.size() = " << s.size() << endl;
int sz = s.size();
int a[32] = {};
///'\0'是ASCII码为0的字符,即字符串结点符,而'0'是数字字符'0',ASCII码是48
for (int i = 0; i < sz; ++i)
a[i] = s[i] - '0';///
/**函数: char*_itoa(int value,char* string,int radix);*/
/**参数说明编辑*/
/**value—–要转换的整形值*/
/**string—–转换后的字符串*/
/**radix——表示基数(2, 8, 10, 16)等进制基数 */
char buffer[20];
int i = 127;
itoa(i, buffer, 10);///<10进制数 转化为char[] ,以10进制形式保存在 char buffer[]中
cout << i << "\t" << buffer << endl;
/**
itoa()函数有3个参数:第一个参数是要转换的数字,第二个参数是要写入转换结果的目标字符串,第三个参数是转移数字时所用的基数。在上例中,转换基数为10。10:十进制;2:二进制...
itoa并不是一个标准的C函数,它是Windows特有的,如果要写跨平台的程序,请用sprintf。
*/
/**
另一种全平台的方法,使用sprintf(printf也是可以的,就是进行标准化输出),参考网址https://blog.csdn.net/bat67/article/details/52063813
*/
char *ch = "128";
int n = atoi(ch);
cout << ch << "\t" << n << endl;///
/**使用下标进行元素获取*/
string mystr = "ABCD";
char mych = mystr[3];
char ch = 'x';
string str(1, ch); ///< 使用构造函数string(n, 'c')将字符串初始化为n个'c'字符的副本。
char c = 'F';
char temp[1];
temp[0] = c;
string result(temp, 1); ///< string str(char*,n);取char数组 的前n个字符 到str中
string str = "hello";
const char* p = str.data();///< 加const 或者用char * p=(char*)str.data();的形式
string str=“world”;
const char *p = str.c_str();///< 同上,要加const或者等号右边用char*
/**注意str的长度要大于要被复制到char* 的数据长度,否则会出先乱码*/
string str="hmmm";
char p[50];
str.copy(p, 5, 0);///< 这里5代表复制几个字符,0代表复制的位置,
*(p+5)=‘\0’;///< 注意手动加结束符!!!
string s;
char p[] = "hello";///<直接赋值,char p[]也可以换成 char *p
s = p;