c++如何将一个char转化为string
作者:carbon06
c++将一个char转化为string
const char c = 'a'; //1.使用 string 的构造函数 string s(1,c); //2.声明string 后将char push_back string s1; s1.push_back(c); //3.使用stringstream stringstream ss; ss << c; string str2 = ss.str(); //注意 使用to_string 方法会转化为char对应的ascii码 //原因是 to_string 没有接受char型参数的函数原型,有一个参数类型 //为int 的函数原型,所以传入char型字符 实际是先将char 转化 //为int 型的ascii 码,然后再转变为string //以下输出结果为 97 cout << to_string(c) << endl;
关于C++char和string类型理解
遇到几个字符串类型的题目发现自己对概念模糊不清。
C++中char是字符类型,是一种基本数据类型,而string是一个模板类,实例化的是对象,它的内部是封装了const char*类型。
在VS2019环境下,如果char ch="abc";编译器会报错,错误提示为:const char*类型的值不能用于初始化char类型的实体。
同理,char *ch="abc";也是类似如此。
双引号应该是声明字符串,编译器默认将双引号中的内容当做一个string类型。
然而char ch=‘abc’;是合法的,是因为单引号将整个abc视为一个字符吗?当然不是。
经过测试:
char ch='abc'; cout<<ch; //打印c
只打印一个c,很奇怪。
然而在gcc下会发出警告:
我也不是太懂,大佬给我找来了如下图:
为什么只打印一个c?
abc是一个字符串,赋值给一个字符时,会取字符串中最低的位数赋值。
关于char*和string
前面提到,string内部封装了const char*,是一个常量指针,指向可以改变,但是指向的值不能改变。
char*是一个字符型指针,可以指向一个字符数组,与string不太相同的是,字符数组存储的字符串必须以'\0'结尾,代表结束符号,而string并不一定以'\0'结束。
string的内存管理是由系统处理的,除非内存池用完,否则基本上不会出现什么内存问题。
而char*的内存需要自己手动管理了,很容易出现内存问题。
所以当你需要存一个串,但是不知道其多大时,用string更为合适。
char*和string的互相转化
如果要将string直接转换为const char*类型,可以使用两个函数。
1.c_str()
string s="abcd"; const char*ch=s.c_str(); //通过VS2019,可以看到该函数的声明为:const char*std::string::c_str()const noexcept;
c_str()函数返回一个指向正规C字符串的指针,内容与string相同,因为C本身没有string类
但是,上面这种用法很不安全,因为ch最后指向的内容是垃圾值,s对象被析构了。而且c_str()返回的是一个临时指针,不能对其进行操作。
通过strcpy函数来进行转换是安全的:
char ch[20]; string s="abcd"; strcpy(ch,s.c_str());
2.data()
string s="abcd"; const char*ch=s.data();
那c_str()和data()有什么区别呢?
c_str()会在数据的末尾添加'\0'结束符,多数用于使用字符串场合。
而data()函数不会添加'\0'结束符。
如果要转换为char*而非const char*类型
string s="abcd"; char *ch; ch=(char*)malloc((s.length())*sizeof(char)); s.copy(ch,s.length(),0);//把当前串中以0开始的s.length()个字符拷贝到以ch为起始位置的字符数组中,返回实际拷贝的数目 cout<<ch;
通过str[i]的方式取值的类型
string s = "abcd"; cout << typeid(s[1]).name() << endl;//char
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。