char[],char *,string之间转换

char []与char *之间转换

char []转char *:直接进行赋值即可

1
2
3
4
// char[] 转char *
char str[] = "lala";
char *str1 = str;
cout << str1 << endl;

char *转char[]:字符拷贝实现,不能进行赋值操作

1
2
3
4
5
// char *转换为char []
const char *st = "hehe";
char st1[] = "lalalala";
strncpy(st1, st, strlen(st) + 1); // 注意加1操作
cout << st1 << endl;

char 与const char 之间转换

const char 转char :拷贝实现,不能进行赋值

1
2
3
4
5
6
7
8
9
// const char *转char *
const char *st = "lala";
// 直接赋值不可以
//char *st1 = st; // (不可以编译器报错)
//cout << st1 << endl;
// 另外开辟空间,将字符一个一个复制过去
char *ncstr = new char[strlen(st) + 1];
strcpy(ncstr, st);
cout << ncstr << endl;

char 转const char :直接进行赋值

1
2
3
4
// char *转const char * 
char *st = "hehe"; // (编译提示警告)
const char *st1 = st;
cout << st1 << endl;

char *与string之间转换

char *转string:1)直接赋值;2)构造转换实现

1
2
3
4
5
6
7
8
9
10
11
12
// char*转换为string
// (注意,定义char *变量,并直接赋值,最好定义为const变量,否则编译器警告)
const char *st = "hello";
// 赋值转换
string st1 = st;
cout << st1 << endl;
// 构造转换
string s1(st, st + strlen(st));
cout << s1 << endl;
// 改变const char *变量值
st = "lalala";
cout << st << endl;

string转char *:赋值操作(注意类型转换)

1
2
3
4
5
6
// string转char *
string st = "My test";
//char *st1 = st; // 错误类型不同
//char *st1 = st.c_str(); // 错误类型不同
char *st1 = const_cast<char *>(st.c_str()) ; //c_str得到的是const char *
cout << st1 << endl;

char[]与string之间转换

char []转string:1)直接赋值;2)构造转换实现

1
2
3
4
5
6
7
8
// char[]转换为string 
char st[] = "hello";
// 直接赋值实现
string st1 = st;
cout << st1 << endl;
// 构造实现
string st2(st, st + strlen(st));
cout << st2 << endl;

string转char[]:拷贝实现,不能直接赋值

1
2
3
4
5
6
7
8
// string转char []
string ts = "My test1";
//char ts1[] = ts; // 错误
//char ts1[] = const_cast<char *>(ts.c_str()); // 错误
char ts1[] = "lalallalalaaaa";
strncpy(ts1, ts.c_str(), ts.length() + 1); // 注意,一定要加1,否则没有赋值'\0'
cout << ts1 << endl;
return 0;

比较通用的类型转换,利用sstream库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//test
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
stringstream turnturn;
const char *sss = "ssssssss";
int s = 1111;
turnturn << s;
string rem;
turnturn >> rem;
cout << rem;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//test
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int main(int argc, char *argv[])
{
stringstream stream;
// 将string转换为int
string text = "123456";
stream << text;
int n = 0;
stream >> n;
n++;
cout << n << endl;

text = "";
// 注意这句clear必不可少,注释掉之后stream的<<操作无效
stream.clear();
stream.str("");
// 将int转换为string
stream << n;
stream >> text;
// 加一句hello方便区分
text += "hello";
cout << text << endl;
system("pause");
return 0;
}
  • 如果你想要转换多个int/double等类型的变量,而又始终用一个stringstream对象(避免总是创建stringstream的开销),那么你就需要在再一次用stringstream之前将stringstream的内容清空。
1
2
stream.clear();	//重置状态
stream.str(""); //清空数据
Donate? comment?