美文网首页
全类型互转

全类型互转

作者: 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

相关文章

  • 全类型互转

    C++中string、char *、char[]的转换 一、string转char*。 主要有三种方法可以将str...

  • iOS-类型转换

    数据类型与char*类型的相互转换(NSData <-> char *) 字符串类型与数据类型的相互转换(NSSt...

  • python做大数哪能不懂GMPY2

    类型介绍 mpz 对应python中的 long类型,并且可以相互转换 mpq对应python中的分数,并且可以相互转换

  • Struts2之数据校验和国际化

    数据校验和类型转换 数据校验:Interface Action: 类型转换:实现字符串类型和其它类型相互转换。 国...

  • 2018-10-01 python时间转换

    python 时间类型和相互转换 - shhnwangjian - 博客园

  • golang中string slice array转换 byte

    unsafe 任何类型的指针和 unsafe.Pointer 可以相互转换。 uintptr 类型和 unsafe...

  • Blob类型和String类型互转

    最近有个需求是把文件内容转成字符串展示出来,并且用户可以修改再上传到服务器。废话不多说,代码如下: Blob读取:...

  • Go语言 类型转换,类型断言,类型开关

    类型转换Go语言中提供了一种不同类型但是相互兼容的可以相互转换的方式,这种方式是非常有用且安全的。非数值间相互转换...

  • 数据格式操作(json等)

    json 以下分别是切片json互转和map,json互转两种,后者比较麻烦,取值的时候需要进行接口类型断言 xm...

  • C++类型转换

    static_cast(编译阶段) 用于类型相关的指针之间相互转换 用于基本类型的数据之间进行类型转换 dynam...

网友评论

      本文标题:全类型互转

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