C++中char,string与int类型转换

僤鯓⒐⒋嵵緔 提交于 2020-02-19 10:37:07

C++中char,string与int类型转换是一个不太好记的问题,在此总结一下,有好的方法会持续更新。

1.char与string

char是基础数据类型,string是封装了一些操作的标准类,在使用上各有千秋。

1.1 char *或者char [ ]转换为 string时,可以直接赋值。

    string x;
    string y;
    char *ptr1 = "sakura";
    char ptr2[]= "waseda";
    x = ptr1;
    y = ptr2;

1.2 string转换为char*或者char[ ]时,有3种方法。

1.2.1 使用string内置c_str()函数。注意不直接赋值,因为string类对象最后会析构导致左值成为空指针。附加结束符\0

    string x = "waseda";
    char *ptr;
    strcpy(ptr,x.c_str());

1.2.2 使用string内置data()函数。不附加结束符\0

    string x = "waseda";
    char *ptr;
    strcpy(ptr,x.data());

1.2.3 使用string内置copy()函数。不附加结束符\0

    string str="waseda";
    char ptr[10];
    str.copy(ptr,5,0); 

2.char与int

2.1 char数字 转int ,直接减'0'就好。char数组则使用atoi,stringstream。

    char u = '3';
    int num0 = u-'0';
    char x[] = "223";
    char *k = "233";
    int num1 = atoi(x);
    int num2 = atoi(k);
//stringstream
    int num0;
    char x[10] = "233" ;
    stringstream ss;
    ss<<x;
    ss>>num0;

2.2 int 转char数字,直接加'0'。char数组可以使用atoi,sprintf,stringstream。

2.2.1 itoa函数windows平台独有,不通用。第三个参数为使用的进制。

    int num0 = 233;
    char x[10] ;
    itoa(num0,x,10);

2.2.2 sprintf函数

    int num0 = 233;
    char x[10] ;
    sprintf(x, "%d", num0);

2.2.2 stringstream,重复使用记得clear。

    int num0 = 233;
    char x[10] ;    
    stringstream ss;
    ss<<num0;
    ss>>x;

3.string与int

3.1 int 转string,有std内置to_string函数与stringstream流。

3.1.1 to_string

    string str ;
    int num=233;
    str = to_string(num);

3.1.2 stringstream,可以输出到string或者使用流的str()函数。

    int num = 233;
    string str ;
    stringstream ss;
    ss<<num;
    ss>>str;
    cout<<str<<endl;//第一种
    cout<<ss.str()<<endl;//第二种

3.2 string转int,有先转为char然后int的方法,std内置stoi与stringstream

3.2.1 使用c_str(),atoi()中转

    int num ;
    string str="233" ;
    stringstream ss;
    num = atoi(str.c_str());

3.2.2 stoi

    int num ;
    string str="233" ;
    stringstream ss;
    num = stoi(str);

3.2.3 stringstream

    int num0;
    string str = "233" ;
    stringstream ss;
    ss<<str;
    ss>>num0;
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!