C++基础积累(3)string和char*、int的互转方法

最常见类型互转~
 
1、char* 转string  
 char* cp="char";
 string sp=cp;
 cout<<sp<<endl;
2、string转char* 有三种方法
  ①.data
string sgp="string";
const char* crp=sgp.data();
cout<<crp<<endl;
②.c_str
string str="gdfd"; 
char *p=str.c_str(); 
③copy
string str="hello"; 
char p[40]; 
str.copy(p,4,1); //这里5,代表复制几个字符,0代表复制的开始位置index
*(p+4)='\0'; //要手动加上结束符
cout <<p<<endl;
3、int转string
int intp=32;
char temp[64];
sprintf(temp,"intp=%d,intp=%d",intp,4);
string s=temp;
cout<<s<<endl;
4、string转int
std::string text = "152"; 
int number = std::atoi( text.c_str() ); 
//如果转换失败,有两种可能:①:number可能由于过大或过小而不能完全存储 ,
//②不能转换成一个数字
cout<<"number="<<number<<endl;

好了,讲了这些类型的转换,其他自己变通吧~  如果知道根据方便的转换方式请记得和我分享一下噢~
 
补充:java中字符串用“+”号连接的问题
AnsiString str;
AnsiString s = "a";
str = s + "b";    //正常
str = AnsiString("a") + "b" ; //正常
str = "a" + "b";  //异常 为什么?
第1个和第2个正确,是因为支持一个AnsiString和一个未定义类型的字符串例如"b"相加,并且在执行这种相加时,编译器应该是将"b"强制转化为了AnsiString。
str = "a" + "b";  //异常 为什么?
在vc中用string str="a"+"b";报的错很明显“cannot add two pointers”
你现在的"a"与"b"仅仅是C风格的字符串,并不是BCB里的AnsiString或者VC里的CString或者C++里的string,C++并不支持两个这样的字符串相加。
string、CString、AnsiString之所以能够相加,是因为它们都是类,它们的类定义了例如AnsiString operator+( const char* a, const char* b)这样的操作。

你可能感兴趣的:(C++基础积累(3)string和char*、int的互转方法)