string str("OK");
char * p = str.c_str();
(2)char * -->string
char *p = "OK";
string str(p);
(3)char * -->CString
char *p ="OK";
CString m_Str(p);
//或者
CString m_Str;
m_Str.Format("%s",p);
(4)CString --> char *
CString str("OK");
char * p = str.GetBuffer(0);
...
str.ReleaseBuffer();
(5)string --> CString
CString.Format("%s", string.c_str());
(6)CString --> string
string s(CString.GetBuffer(0));
GetBuffer()後一定要ReleaseBuffer(),否則就沒有釋放緩衝區所佔的空間,CString對象不能動態增長了。
(7)double/float->CString
double data;
CString.Format("%.2f",data); //保留2位小數
(8)CString->double
CString s="123.12";
double d=atof(s);
(9)string->double
double d=atof(s.c_str());
---------------------------------------------------------------------------------------------------------------------------------
使用函數sprintf()進行轉換
(1) int-->char
char str[10];
int a=1234321;
sprintf(str,"%d",a);
char str[10];
int a=175;
sprintf(str,"%x",a);//10進制轉換成16進制,如果輸出大寫的字母是sprintf(str,"%X",a)
(2)double--->char
char str[10];
double a=123.321;
sprintf(str,"%.3lf",a);
--------------------------------------------------------------------------------------------------------------------------------------------------
使用sscanf()函數
(1)char-------->int
char str[]="1234321";
int a;
sscanf(str,"%d",&a);
char str[]="AF";
int a;
sscanf(str,"%x",&a); //16進制轉換成10進制
(2) char------->double
char str[]="123.321";
double a;
sscanf(str,"%lf",&a);
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
使用stringstream類
用ostringstream對象寫一個字符串,類似於sprintf()
ostringstream s1;
int i = 22;
s1 << "Hello " << i << endl;
string s2 = s1.str();
cout << s2;
用istringstream對象讀一個字符串,類似於sscanf()
istringstream stream1;
string string1 = "25";
stream1.str(string1);
int i;
stream1 >> i;
cout << i << endl; // displays 25
1.string類型轉換爲char *
(1)使用stringstream進行轉換
代碼爲:
#include <iostream>
#include <string>
#include <cstring>
#include <sstream>
using namespace std;
int main(int argc, char *argv[])
{
stringstream sstr;
sstr.clear();
char * ch = new char[1024];
string s="abcd";
sstr<<s;
sstr>>ch;
cout<<ch<<endl;
return 0;
}
(2)運用basic_string::c_str轉換
1)函數原型:const value_type *c_str( ) const;
2)函數描述:
Converts the contents of a string as a C-style, null-terminated string.
將一個字符串的內容轉化爲一個c風格字符串的指針。
3)代碼爲:
// basic_string_c_str.cpp
// compile with: /EHsc
#include <string>
#include <iostream>
int main( )
{
using namespace std;
string str1 ( "Hello world" );
cout << "The original string object str1 is: "
<< str1 << endl;
cout << "The length of the string object str1 = "
<< str1.length ( ) << endl << endl;
// Converting a string to an array of characters
const char *ptr1 = 0;
ptr1= str1.data ( );
cout << "The modified string object ptr1 is: " << ptr1
<< endl;
cout << "The length of character array str1 = "
<< strlen ( ptr1) << endl << endl;
// Converting a string to a C-style string
const char *c_str1 = str1.c_str ( );
cout << "The C-style string c_str1 is: " << c_str1
<< endl;
cout << "The length of C-style string str1 = "
<< strlen ( c_str1) << endl << endl;
}
4)運行結果:
The original string object str1 is: Hello world
The length of the string object str1 = 11
The modified string object ptr1 is: Hello world
The length of character array str1 = 11
The C-style string c_str1 is: Hello world
The length of C-style string str1 = 11
2.char *類型轉換爲字符串string型
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
string str = "hello world";
char * ch = 0;
//one method
strcpy(ch,str.c_str()); //即可
cout << ch << endl;
//another method
for(int i = 0; i < str.length();i ++ )
{
ch = str.at(i);
ch++;
}
// system("pause");
return 0;
}
--------------------------------------------------------------
2、string 轉換成 char *
如果要將string直接轉換成const char *類型。string有2個函數可以運用。
一個是.c_str(),一個是data成員函數。
例子如下:
string s1 = "abcdeg";
const char *k = s1.c_str();
const char *t = s1.data();
printf("%s%s",k,t);
cout<<k<<t<<endl;
如上,都可以輸出。內容是一樣的。但是隻能轉換成const char*,如果去掉const編譯不能通過。
那麼,如果要轉換成char*,可以用string的一個成員函數copy實現。
string s1 = "abcdefg";
char *data;
int len = s1.length();
data = (char *)malloc((len+1)*sizeof(char));
s1.copy(data,len,0);
printf("%s",data);
cout<<data;
3、char *轉換成string
可以直接賦值。
string s;
char *p = "adghrtyh";
s = p;
不過這個是會出現問題的。
有一種情況我要說明一下。當我們定義了一個string類型之後,用printf("%s",s1);輸出是會出問題的。這是因爲“%s”要求後面的對象的首地址。但是string不是這樣的一個類型。所以肯定出錯。
用cout輸出是沒有問題的,若一定要printf輸出。那麼可以這樣:
printf("%s",s1.c_str())
4、char[] 轉換成string
這個也可以直接賦值。但是也會出現上面的問題。需要同樣的處理。
5、string轉換成char[]
這個由於我們知道string的長度,可以根據length()函數得到,又可以根據下標直接訪問,所以用一個循環就可以賦值了。
這樣的轉換不可直接賦值。
string pp = "dagah";
char p[8];
int i;
for( i=0;i<pp.length();i++)
p[i] = pp[i];
p[i] = '\0';
printf("%s\n",p);
cout<<p;
------------------------------------------------------
把string轉換爲char* 的三種方法
一、data
string str = "abc";
char *p = const_cast<char*>(str.data());
二、c_str
string str = "gdfd";
char *p = const_cast<char*>(str.c_str());
三、copy
string str = "hello";
char p[40];
str.copy(p,5,0); //這裏5,代表複製幾個字符,0代表複製的位置
*(p+5)='\0'; //要手動加上結束符
--------------------------------------------------------------
char *ultoa(unsigned long value,char *string,int radix)
將無符號整型數value轉換成字符串並返回該字符串,radix爲轉換時所用基數
char *ltoa(long value,char *string,int radix)
將長整型數value轉換成字符串並返回該字符串,radix爲轉換時所用基數
char *itoa(int value,char *string,int radix)
將整數value轉換成字串存入string,radix爲轉換所用基數.
double atof(char *nptr)
將字符串nptr轉換成雙精度數,並返回這個數,錯誤返回0
int atoi(char *nptr)
將字符串nptr轉換成整型數, 並返回這個數,錯誤返回0
long atol(char *nptr)
將字符串nptr轉換成長整型數,並返回這個數,錯誤返回0
double strtod(char *str,char **endptr)
將字符串str轉換成雙精度數,並返回這個數,
long strtol(char *str,char **endptr,int base)
將字符串str轉換成長整型數, 並返回這個數,