char和string 两者关系很微妙,因为都是字符,但是他们直接的联系却不是很多,这里我和大家聊聊字符的两大势力的相爱相杀。
char也就是字符型数据定义,string也就是字符串类型数据定义,乍一看他们很想,一个是字符一个是字符串,字符串不就是字符串起来得到的吗?但是事实上,字符串即是“字符”串起来也不是“字符”串起来,听起来是不是很奇怪,这里面的两个字符的意义其实是不一样的,第一个“字符”的意思是指一个单位的字形、类字形单位或符号的基本信息,而第二个“字符”的意思是字符类型。可能大家听得还是很糊涂,我帮大家捋一捋,我们现在要先弄清楚一点,char是字符类型,属于一个类,属于编程语言中的一个数据类型,而他和字符有区别,字符是什么?字符指的是一个基本信息单位,也就是说字符是一个数据,它可以是数字也可以是字母。
所以,char是一个可以用来存储字符数据的变量类型,而string就是一个存储一串字符数据的变量类型,他们的共同点就是他们都是变量类型,都是用来存储字符的。
我想这样说大家应该明白了,既然他们俩如此相像,也就免不了他们要常常互动了,不过在讲他们的交互之前,我要和大家再提一个概念,不过希望大家能先理清刚刚讲的再看,不然会越看越乱的。
下面我要说的就是字符数组,char[],他是一组char类变量组成的,也可以用来存储一串字符数据,和string的作用很是相像,但是本质是不一样的,他们应该是数组变量,一个是类变量,char[]很好理解,他就是一个数组,每个单元里面放一个字符数据,string则是一个整体,最后以字符’ ’,作为分隔标识,而且他还有很多类函数可以调用使用。
下面举个例子:
#include<iostream> #include<string> using namespace std; void main() { string Lyu; Lyu = "I love C++"; cout << "字符串为:" + Lyu << endl; cout << "字符串的长度为:" << Lyu.length() << endl; cout << "是否为空:" << Lyu.empty() << endl << endl; //若返回值为0,则指字符串不为空 Lyu.append("!"); //字符串后追加一个! cout << "追加修改后的字符串为:" << Lyu << endl << endl; string Lyu_2; Lyu_2 = "I love too"; Lyu.swap(Lyu_2); //字符串数据交换 cout << "交换修改后的字符串为:" << Lyu << endl << endl; int site; site = Lyu.find('l', 0); //从0开始寻找出现l的位置并返回位置 cout << "字符串中出现l的位置为:" << site << endl; site = Lyu.find("oo", 0); //从0开始寻找出现oo的位置并返回位置 cout << "字符串中出现oo的位置为:" << site << endl << endl; site = 0; //遍历搜索所有o的位置 do { site = Lyu.find('o', site); if (site == -1) cout << "搜索完毕,无其他项" << endl; else cout << "字符串中出现o的位置为:" << site << endl; site++; } while (site != 0); getchar(); }
它的执行结果是:
和大家提了几个常用函数,如
length()函数——查看字符串的长度
empty()函数——检查字符串是否为空,0表示不为空
append("字符串")——在字符串后添加新字符
find('字符', 0)——从0位查看第一个出现的该字符的位置
……
具体理论区别大家有兴趣可以去自行研究,我就不做太深入的介绍了,下面就到正题,这两者的相互转化。
string类怎么转换成一个char数组
下面是代码
#include<iostream> #include<string> using namespace std; void main() { string LyuS = "Welcome to learn C++"; const char *LyuC = LyuS.data(); //字符串转换为字符数组 cout << "LyuC :"<< LyuC << endl; for(int i = 0 ; i < LyuS.length() ; i ++) cout << "LyuC[" << i << "] :" << LyuC[i] << endl; char LyuC_2[10]; LyuC_2[0] = 'a'; //给字符数组进行赋值 for (int j = 1; j < 9; j++) { LyuC_2[j] = LyuC_2[j - 1] +1; } LyuC_2[9] = '