zoukankan      html  css  js  c++  java
  • C++中string、char *、char[]的转换

    一、string转char*

      主要有三种方法可以将str转换为char*类型,分别是:data(); c_str(); copy();

      1.data()方法,如:  

    string str = "hello";
    const char* p = str.data();//加const  或者用char * p=(char*)str.data();的形式

      同时有一点需要说明,这里在devc++中编译需要添加const,否则会报错invalid conversion from const char*  to char *,这里可以再前面加上const或者在等号后面给强制转化成char*的类型。

      下面解释下该问题,const char*是不能直接赋值到char*的,这样编译都不能通过,理由:假如可以的话,那么通过char*就可以修改const char指向的内容了,这是不允许的。所以char*要另外开辟新的空间,即上面的形式。

      

      2.c_str()方法,如:

    string str=“world”;
    const char *p = str.c_str();//同上,要加const或者等号右边用char*

      3.copy()方法,如:

    string str="hmmm";
    char p[50];
    str.copy(p, 5, 0);//这里5代表复制几个字符,0代表复制的位置,
    *(p+5)=‘0’;//注意手动加结束符!!!

    二、char * 转string。

      可以直接赋值。

    string s;
    char *p = "hello";//直接赋值
    s = p;

        这里有一点要说明,当声明了string类型变量s后,用printf("%s",s);是会出错的,因为“%s”要求后面的对象的首地址。但是string不是这样的一个类型。所以肯定出错。

      

    三、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] = '';
    printf("%s
    ",p);
    cout<<p;

    四、char[]转string

      这里可以直接赋值。

    五、char[]转char*

    #include<iostream>
    #include<string.h>
    using namespace std;
     
    int main(){
        //char[] 转 char*
        char ch[]="abcdefghijklmn";
        char *s = ch;
        cout<<s<<endl; 
        return 0;
    }

    六、char*转char[] 

    #include<iostream>
    #include<string.h>
    using namespace std;
     
    int main(){
        //char* 转 char[]
        char *s="abcdefghijklmn";
        char  ch[100];
        strcpy(ch,s);
        cout<<ch<<endl; 
        return 0;
    }

    参考地址:https://www.cnblogs.com/Pillar/p/4206452.html

  • 相关阅读:
    AtCoder Beginner Contest 205
    Codeforces Round #725 (Div. 3)
    Educational Codeforces Round 110 (Rated for Div. 2)【A
    Codeforces Round #722 (Div. 2)
    AtCoder Beginner Contest 203(Sponsored by Panasonic)
    AISing Programming Contest 2021(AtCoder Beginner Contest 202)
    PTA 520 钻石争霸赛 2021
    Educational Codeforces Round 109 (Rated for Div. 2)【ABCD】
    AtCoder Beginner Contest 200 E
    Educational Codeforces Round 108 (Rated for Div. 2)【ABCD】
  • 原文地址:https://www.cnblogs.com/kerwincui/p/12730497.html
Copyright © 2011-2022 走看看