C/ C++字符串的各種轉換

(1)string --> char *
   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轉換成長整型數,   並返回這個數,

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章