在算法竞赛题目和平时的编程中经常会遇到处理字符串的问题,常用的方法是使用string类处理字符串。但是在一些C语言版本的函数中智能处理char类型的字符串,因此掌握string与char类型数据转换会提供很大的便利。本文第二部分简要介绍了C++中string
、char*
和char[]
之间的转换代码,另外还介绍了char
字符类型与前三者的转换代码。
#include <iostream> #include <string> #include <string.h> using namespace std; int main(int, char**) { string str = "Hello World"; char* s1 = nullptr; char* s2 = nullptr; const char* s3; s1 = new char[str.length() + 1]; s2 = new char[str.length() + 1]; strcpy(s1, str.c_str()); strcpy(s2, str.data()); s3 = str.c_str(); cout << s1 << endl; cout << s2 << endl; cout << s3 << endl; return 0; }
输出结果:
Hello World Hello World Hello World
需要注意的是:
s3
为const char*
类型,因此无法通过类似s3[0]='x'
的代码修改原始的str
;char* s4
达到修改原始str
的效果,可以如下代码达到该目的:char* s4 = &str[0]; s4[0] = 'x';
str.c_str()
和str.data()
函数功能完全相同,都是返回一个const char*
;代码:
#include <iostream> #include <string> #include <string.h> using namespace std; int main(int, char**) { char* s = "Hello World"; string str1 = s; string str2(s); string str3 = string(s); cout << str1 << endl; cout << str2 << endl; cout << str3 << endl; return 0; }
输出:
Hello World Hello World Hello World
在将string str
转为char s[]
时需要保证s[]
的空间大小大于str
的大小+1,因为在s[]
中在字符串在最后需要使用\0
作为字符串的结束符号。
代码:
#include <iostream> #include <string> #include <string.h> using namespace std; int main(int, char**) { string str = "Hello World"; char s1[str.length() + 1]; char s2[str.length() + 1]; strcpy(s1, str.c_str()); strcpy(s2, str.data()); cout << s1 << endl; cout << s2 << endl; return 0; }
输出结果:
Hello World Hello World
char s1[]
与char* s2
类似,因为在C语言的数组中,数组名称即为数组的首地址,而地址又可以使用指针表示,因此可以认为char s1[]
和cahr* s2
等价。
代码:
#include <iostream> #include <string> #include <string.h> using namespace std; int main(int, char**) { char s[12] = "Hello World"; string str1 = s; string str2(s); string str3 = string(s); cout << str1 << endl; cout << str2 << endl; cout << str3 << endl; return 0; }
输出结果:
Hello World Hello World Hello World
[1]. C++中string、char *、char[]的转换