std::string和int类型的相互转换(CC++)
字符串和数值之前转换,是⼀个经常碰到的类型转换。
之前字符数组⽤的多,std::string的这次⽤到了,还是有点区别,这⾥提供C++和C的两种⽅式供参考:
优缺点:C++的stringstream智能扩展,不⽤考虑字符数组长度等..;但C的性能⾼
有性能要求的推荐⽤C实现版本。
上测试实例:
1 #include <iostream>
2 #include <cstdlib>
3 #include <string>
4 #include <sstream>
5
6using namespace std;
7int main()
8 {
9//C++ method
10    {
11//int -- string
12        stringstream stream;
13
14
15        stream.clear(); //在进⾏多次转换前,必须清除stream
16int iValue = 1000;
17string sResult;
18        stream << iValue; //将int输⼊流
19        stream >> sResult; //从stream中抽取前⾯插⼊的int值
20        cout << sResult << endl; // print the string
21
22//string -- int
23        stream.clear(); //在进⾏多次转换前,必须清除stream
24string sValue="13579";
25int iResult;
26        stream<< sValue; //插⼊字符串
27        stream >> iResult; //转换成int
28        cout << iResult << endl;
29    }
30
31//C method
32    {
33//int -- string(C) 1
34int iValueC=19000;
35char cArray[10]="";//需要通过字符数组中转
36string sResultC;
37//itoa由于它不是标准C语⾔函数,不能在所有的编译器中使⽤,这⾥⽤标准的sprintf
38        sprintf(cArray, "%d", iValueC);
39        sResultC=cArray;
40        cout<<sResultC<<endl;
41
42//int -- string(C) 2
43int iValueC2=19001;
44string sResultC2;
45//这⾥是⽹上到⼀个⽐较厉害的itoa  >>  后⽂附实现
46        sResultC2=itoa(iValueC2);
47        cout<<sResultC2<<endl;
48
49//string -- int(C)
50string  sValueC="24680";
c++string类型51int iResultC = atoi(sValueC.c_str());
52        cout<<iResultC+1<<endl;
53    }
54
55return0;
56 }
test.cpp
如下是⽹上到的⼀⽚⽐较经典的itoa实现!
1#define INT_DIGITS 19        /* enough for 64 bit integer */
2
3char *itoa(int i)
4 {
5/* Room for INT_DIGITS digits, - and '\0' */
6static char buf[INT_DIGITS + 2];
7char *p = buf + INT_DIGITS + 1;    /* points to terminating '\0' */ 8if (i >= 0) {
9do {
10            *--p = '0' + (i % 10);
11            i /= 10;
12        } while (i != 0);
13return p;
14    }
15else {            /* i < 0 */
16do {
17            *--p = '0' - (i % 10);
18            i /= 10;
19        } while (i != 0);
20        *--p = '-';
21    }
22return p;
23 }
itoa.c

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。