C++ 的 std::string 有什么缺点? - 知乎
C++之string类型详解 - 百度文库
1 - string是char的定义
string:
string是C++标准库(STL)中的类型,是一个类,定义在 < string > 头文件中。里面包含了对字符串的各种常用操作,它较 char* 的优势是内容可以动态拓展,以及对字符串操作的方便快捷,用+号进行字符串的连接是最常用的操作。
char*:
char* 是一个指向字符的指针,是一个内置类型。可以指向一个字符,也可以表示字符数组的首地址(首字符的地址)。我们更多的时候是用的它的第二的功能,来表示一个字符串,功能与字符串数组char ch[n]一样,表示字符串时,最后有一个 ' ’结束符作为字符串的结束标志。
2 - 区别
研究区别首先要看一下char、char*、与string分别属于的指针、数组、对象。从这三个类型基本就可以看出区别在哪里。
char *s1; //s1是指向字符串的指针 char s2[1]; //s2是字符类型的一维数组 string s3; //s3是string类的对象
区别:
(1)char*与char[]
1 - char *a
a是一个指向已知字符串的指针,实质是指针。
2 - char arr[]
arr本身是一个字符串数组,arr指向该数组的第一个元素,实质是数组。
3 - char*a 与char arr[]
[1] 赋值区别
char s1[5];
char *s2;
s1 = "abcd"; //error
s2 = "abcd"; //correct
//s1是数组的名字,当成是常量指针,不可以作为左值修改。
//s2是一个指针变量,可以将其指向一个字符串常量
//使用char*定义字符串,不能改变字符串内的字符的内容,但却可以把另外一个字符串付给它
//使用char[]可以改变字符的内容
[2]大小区别
char str[] = {"abcd"},sizeof(str) = 5,strlen(str) = 4
char *str = {"abcd"}, sizeof(str) = 4,strlen = 4
[3]转换方法
- 把char arr[]赋值给char *a
很简单:
char arr[]={"qwer"};
char *a=arr;
- 把char* 赋值给char arr[]
需要通过循环来一个一个地赋值
(2)char和string
1 - 定义和赋值 //char char ch1[30],ch2[30]; cin>>ch1; ch2=ch1; //错误(报错:char表达式必须是可修改的左值),即只有在定义时char数组可以用“=” //可以使用strcpy来进行赋值 char ch3[] = "give me"; char ch4[] = "a cup"; strcpy(ch3,ch4); cout<<"ch3="<>str1; str2=str1; //正确,string类型可以使用“=” string str3 = "give me"; string str4 = "a cup"; str3.assign(str4,0,5); // 第2个参数“0”为起始位置,第3个参数“5”为字符数 cout<<"str3="<


