一、摘要
在算法竞赛题目和平时的编程中经常会遇到处理字符串的问题,常用的方法是使用string类处理字符串。但是在一些C语言版本的函数中智能处理char类型的字符串,因此掌握string与char类型数据转换会提供很大的便利。本文第二部分简要介绍了C++中string 、char* 和char[] 之间的转换代码,另外还介绍了char 字符类型与前三者的转换代码。
二、string、char*和char[] 之间的转换
1. string 转为 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* ;
2. char* 转为 string
代码:
#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
3. string 转为char[]
在将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
4. char[]转为string
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[]的转换
|