C/ C++字符串的各种转换

来源:互联网 发布:java 数据类型 double 编辑:程序博客网 时间:2024/05/24 01:45
(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转换成长整型数,   并返回这个数,

0 0
原创粉丝点击