C++中string, char*,char[ ]之间的转换

在做题的时候经常遇到string, char*,char[ ]之间的转换,而且很容易记混导致程序出错。是时候把这三者的转换方法整理出来了!

一、char[ ] 转 char* 。

可以直接赋值。

char c[11];
char *cp = NULL;
cin>>c;
cp = c;   \\直接赋值
cout<<cp<<endl;

二、char[ ] 转 string。

同样可以直接赋值。

char c[11];
string str;
cin>>c;
str = c;  \\直接赋值
cout<<str<<endl;

三、char* 转 char[ ]。

首先保证char*指向有效内存,然后使用strcpy()对char[ ]赋值。

char c[11],t[11];
char *cp=NULL;
cin>>t;
cp = t;  //指向有效内存
strcpy(c,cp);
cout<<c<<endl;

四、char* 转 string。

首先保证char*指向有效内存,然后直接赋值。

char t[11];
char *cp=NULL;
string str;
cin>>t;
cp = t;  //指向有效内存
str = cp;
cout<<str<<endl;

五、string 转 char[ ]。

通过string.length()获得字符串长度,然后老老实实一个个赋值。

string str;
char c[11];
cin>>str;
for(int i=0;i<str.length();i++){
 c[i] = str[i];
}
c[i]='\0';  \\记得添加字符串结尾符!
cout<<c<<endl;

六、string 转 char*。

使用string类中提取C串的成员函数:c_str(), data() 或 copy()可以实现。
首先简单介绍一下这3个函数(如果你很着急,也可以不用看~):

函数原型功能
unsigned copy (char * s, unsigned n, unsigned pos = 0) const;将string对象从pos开始的n个字符复制给字符串s,返回字符数
const char * c_str( ) const;返回指针,指向string类对象中的字符串,末尾加上’\0’
const char * data( ) const;返回指针,指向string类对象中的字符串

1 使用c_str()方法:

string str;
char *cp = NULL;
cin>>str;
cp = (char*)str.c_str();
cout<<cp<<endl;

c_str()返回const char*类型,所以需要强制转换为char * 。当然,也可以直接定义 const char* cp;

2 使用data()方法:

string str;
char *cp = NULL;
cin>>str;
cp = (char *)str.data();
cout<<cp<<endl;

同上,需要强制转换为char *,或者直接将cp定义为指针常量。

3 使用copy()方法:

string str;
char *cp = NULL;
cin>>str;
int length = str.length()+1;
cp = new char[length];
str.copy(cp,length,0);
cp[length]='\0';  //添加字符串结尾符!!!
cout<<cp<<endl;

附:示例代码

#include <iostream>
#include <string>
using namespace std;

int main(){
	/*-----------------------------PART ONE------------------------------------*/
	 char c1[11];
	 char *cp1=NULL;
	 string str1;
	 cout<<"Please input a c[] (length limited 10):"<<endl;
	 cin>>c1;
	
	 //char[] to char*: 直接赋值
	 cp1 = c1;  
 	 cout<<"1. Convert char[] to char*: "<<endl;
 	 cout<<cp1<<endl;

	 //char[] to string: 直接赋值
	 str1 = c1;
 	 cout<<"2. Convert char[] to string: "<<endl;
 	 cout<<str1<<endl;
 	 /*-----------------------------PART TWO------------------------------------*/
 	 char c2[11],t[11];
 	 char *cp2=NULL;
 	 string str2;
 	 cout<<"Please input a c[] (length limited 10):"<<endl;
 	 cin>>t;

	 //char* to char[]:首先保证char*指向有效内存,然后使用strcpy()对char[]赋值
	 cp2=t;  //指向有效内存
 	 strcpy(c2,cp2);
 	 cout<<"3. Convert char* to char[]: "<<endl;
 	 cout<<c2<<endl;

	 //char* to string:首先保证char*指向有效内存,然后直接赋值
 	 str2=cp2;
 	 cout<<"4. Convert char* to string: "<<endl;
 	 cout<<str2<<endl;

	 /*----------------------------PART THREE-----------------------------------*/
 	 char c3[11];
 	 char *cp3=NULL;
 	 string str3;
 	 cout<<"Please input a string (length limited 10):"<<endl;
 	 cin>>str3;

	 //string to char[]:老老实实一个个赋值
	 for(int i=0;i<str3.length();i++){
	  c3[i]=str3[i];
	 }
	 c3[i]='\0';
	 cout<<"5. Convert string to char[]: "<<endl;
	 cout<<c3<<endl;

	 //string to char*:使用string类中提取C串的成员函数(c_str(), data() or copy())
	 //使用string::c_str()
	 cout<<"6_1. Convert string to char* by using string::c_str():"<<endl;
	 cp3 = (char *)str3.c_str();
	 cout<<cp3<<endl;
	 //使用string::data()
	 cp3 = (char *)str3.data();
	 cout<<"6_2. Convert string to char* by using string::data():"<<endl;
	 cout<<cp3<<endl;
	 //使用string::copy()
	 int length = str3.length()+1;
	 cp3 = new char[length];
	 str3.copy(cp3,length,0);
	 cp3[length]='\0';  //添加字符串结尾符
	 cout<<"6_3. Convert string to char* by using string::copy():"<<endl;
	 cout<<cp3<<endl;
	 return 0;
}

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值