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

来源:互联网 发布:java 数据类型 double 编辑:程序博客网 时间:2024/05/13 09:14
(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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 2岁宝宝挑食厌食怎么办 孩子不爱和家长交流怎么办 孩子发烧在医院查不出病因怎么办 宝宝乳牙长歪了怎么办 两岁宝宝不爱吃水果怎么办 两岁宝宝不吃水果怎么办 一岁的宝宝上火了怎么办 吃水果嘴唇肿了怎么办 二岁宝宝不爱吃饭怎么办 小婴儿便秘但不爱喝水怎么办 宝宝只吃水果不吃饭怎么办 一岁宝宝不喜欢吃水果怎么办 1岁宝宝不吃水果怎么办 一岁半宝宝吃水果拉肚子怎么办 大人发烧了怎么办如何退烧 怀孕后不爱吃水果怎么办 不敢吃水果了怕虫怎么办 宝宝发烧38度不出汗怎么办 1岁宝宝喜欢含饭怎么办 3岁宝宝喜欢含饭怎么办 孩子咳嗽发烧怎么办最有效 孩子咳嗽打哈切流鼻涕发烧怎么办 孩子香蕉吃多了怎么办 80多岁老人发烧怎么办 小孩香蕉吃多了怎么办 7个月宝宝缺钙怎么办 宝宝脖子被汗淹到红了脱皮怎么办? 小儿出汗多咳嗽怎么办吃什么 牛高烧不退怎么办最好 猪体温低不吃食怎么办 小孩发烧咳嗽怎么办吃什么药 大晚上发烧39度怎么办 胃受凉了老打嗝怎么办 大人发低烧怎么办如何退烧 吃了退热药不退热怎么办 猪持续高烧不退怎么办 猪感冒了不吃食怎么办 6岁儿童发烧38度怎么办 5岁儿童发烧38度怎么办 7岁儿童发烧38度怎么办 儿童发烧到38度怎么办