在刷一些题目的时候,总是会碰到字符串和数字进行转化的问题,今天我们就在C++中来用多种方法实现。示例代码上传至 https://github.com/chenyufeng1991/TransferStringAndInt 。
(1)string -> char *
// string -> char *
string str3 = "chenyufeng";
const char *str3ToChar;
str3ToChar = str3.c_str();
在C++中字符串我们常用STL中的<string>, 而在C语言中我们常用的是字符数组。直接使用string.c_str()即可完成把string转化为char *;
(2)char * -> string
// char * -> string
char *str4 = "yufeng";
string str5(str4);
cout << str5 << endl;
直接使用string中的构造函数即可完成使用char *初始化string的操作。
(3)使用ostringstream把数字转化为string
// 可以使用ostringstream把int型输入到流中,然后转化为字符串;
ostringstream os; // 字符串输出流
int i = 123;
os << "Hello" << i;
cout << os.str() << endl;
os << i;
cout << os.str() << endl;
os << "World";
cout << os.str() << endl;
ostringstream其实是字符串的输出流,可以不断的在流中插入数据。然后调用ostringstream中的str()方法全部把流中的数据转化为string。
(4)使用istringstream把字符串转化为数字
// 用istringstream对象读一个字符串
istringstream is; // 字符串输入流
is.str("567");
int j;
is >> j;
cout << j << endl;
(5)atoi:库函数,char *转化为int
// string-->int
// 注意:atoi()里面只能传递const char类型,所以需要把string转化为const char
string str = "789";
int str2int = atoi(str.c_str());
cout << str2int << endl;
注意atoi中的参数传递的是char *,而不是string。
(6)sprintf: int 转化为char *
// int-->srting,Xcode中不能使用itoa这个函数,因为这个函数没有定义在标准C++里,但是在有些编译器里可以使用,所以这里推荐使用sprintf
char eeeee[10];
sprintf(eeeee,"%d",444);
cout << string(eeeee) << endl;
注意sprintf的第一个参数要传递的是字符数组或者字符指针。第二个参数是格式化,“%d”表示int。
其实这里最方便的是使用itoa,可以直接进行int和char *的转化,由于我使用的是Xcode进行编程,在Xcode中不能使用itoa这个函数,因为itoa这个函数没有包括在C++的标准库中。所以我这里只能使用sprintf了。大家可以去尝试一下itoa。