美文网首页
全类型互转

全类型互转

作者: Then丶 | 来源:发表于2020-03-17 20:36 被阅读0次

    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();的形式
    

    1a. 如果要将string转换为char*,可以使用string提供的函数c_str() ,或是函数data(),data除了返回字符串内容外,不附加结束符'\0',而c_str()返回一个以‘\0’结尾的字符数组。

    2a. const char c_str();
    c_str()函数返回一个指向正规C字符串的指针,内容与本string串相同.
    这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式.
    注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针
    比如:最好不要这样:
    char
    c;
    string s="1234";
    c = s.c_str(); //c最后指向的内容是垃圾,因为s对象被析构,其内容被处理
    应该这样用:
    char c[20];
    string s="1234";
    strcpy(c,s.c_str());
    这样才不会出错,c_str()返回的是一个临时指针,不能对其进行操作
    再举个例子
    c_str() 以 char* 形式传回 string 内含字符串
    如果一个函数要求char*参数,可以使用c_str()方法:
    string s = "Hello World!";
    printf("%s",s.c_str()); //输出 "Hello World!"

    3a.1
    const char *p = a.data();
    
    3a.2
    const char *p = a.c_str();
    
    3a.3
    char *p = const_cast<char*>(a.c_str());
    
    char * strc = new char[strlen(str.c_str())+1];
    strcpy(strc, str.c_str());
    

    同时有一点需要说明,这里在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] = '\0';
        printf("%s\n",p);
        cout<<p;
    

    四、char[]转string

    这里可以直接赋值。

    char 类型是c语言中常见的一个数据类型,string是c++中的一个,它的定义为 Strings are objects that represent sequences of characters.
    由此可见string是一个char序列的对象,有时候我们经常需要混用这两个数据类型,所以有些常见的错误还是需要避免的:
    比如,string的append函数只能加const char类型的,而push_back函数可以加char类型的,也可以直接用 += 来添加char类型的,如果要同时添加两个char, 比如 char a, char b, 则不能写为 str += a + b, 只能老老实实写成 str = str + a + b;

    • char* to string*
    char *cStr = "C++";
    std::string Str = std::string(cStr);
    
    • string to char*
    std::string str = "string";
    const char *cstr = str.c_str();
    
    • 由于cstr是const的,不能被修改,如果想要修改的话,可以另拷贝一份再修改:
    std::string str = "string";
    char *cstr = new char[str.length() + 1];
    strcpy(cstr, str.c_str());
    // do something here!
    delete [] cstr;
    

    char转int

    char ch = '9';
    if (Character.isDigit(ch)){  // 判断是否是数字
        int num = Integer.parseInt(String.valueOf(ch));
        System.out.println(num);
    }  
    

    char 转 int

    char 转 int 之前,先将运算式中的每个字符都转换成 ASCII 码值,再进行计算。
    以下代码为例,其中 i3 的结果符合我们的预期要求。

    char c = '0';
    
    int i1 = c;                    // 48
    int i2 = c - 0;                // 48
    int i3 = c - '0';              // 0
    int i4 = c + '0';              // 96
    

    int 转 char

    int 转 char 之前,先将运算式中的每个字符都转换成 ASCII 码值,再进行计算。
    计算出数值后,再据此转换为字符(数值为该字符对应的 ASCII 码值)。
    以下代码为例,其中 c4 的结果符合我们的预期要求。
    char 转 int 之前,先将运算式中的每个字符都转换成 ASCII 码值,再进行计算。
    以下代码为例,其中 i3 的结果符合我们的预期要求。

    char c = '0';
    
    int i1 = c;                    // 48
    int i2 = c - 0;                // 48
    int i3 = c - '0';              // 0
    int i4 = c + '0';              // 96
    

    int转string

    1. c++11标准增加了全局函数std::to_string

    2.采用sstream中定义的字符串流对象来实现
    ostringstream os; //构造一个输出字符串流,流内容为空
    int i = 12;
    os << i; //向输出字符串流中输出int整数i的内容
    cout << os.str() << endl; //利用字符串流的str函数获取流中的内容

    二、string转int

    1.可以使用std::stoi/stol/stoll等等函数
    2.采用标准库中atoi函数,对于其他类型也都有相应的标准库函数,比如浮点型atof(),long型atol()等等
    string s = "12";
    int a = atoi(s.c_str());

    3.采用sstream头文件中定义的字符串流对象来实现转换
    istringstream is("12"); //构造输入字符串流,流的内容初始化为“12”的字符串
    int i;
    is >> i; //从is流中读入一个int整数存入i中

    原文:
    https://www.cnblogs.com/wuruofeng/p/10412559.html
    https://blog.csdn.net/qq_30534935/article/details/82683643
    https://www.cnblogs.com/mazhenyu/p/10472187.html

    相关文章

      网友评论

          本文标题:全类型互转

          本文链接:https://www.haomeiwen.com/subject/mquxyhtx.html