C/C++ string和char数组对比
string是c++特有的,使用时需添加头文件#include<string>
(一)#include<string.h>和#include<cstring>以及#include<string.h>区别
<string.h>
<string.h>是C版本的头文件,包含比如strcpy、strcat之类的字符串处理函数。
在C++标准化(1998年)过程中,为了兼容以前,标准化组织将所有这些文件都进行了新的定义,加入到了标准库中,加入后的文件名就新增了一个"c"前缀并且去掉了.h的后缀名,所以string.h头文件成了cstring头文件。但是其实现却是相同的或是兼容以前的,这就是<cstring>的来源,不要觉得又多了一个东西。相当于标准库组织给它盖了个章,说“你也是我的标准程序库的一份子了”。
<string>是C++标准定义的头文件,它定义了一个string的字符串类,里面包含了string类的各种操作,如s.size(), s.erase(), s.insert()等。但<string>又包含了老的C版本的字符串操作如strcpy、strcat等,这就相当于,在<string>的文件中除了定义自己的string类之外,还加了一个#include<string.h>一句包含了C版本的字符串操作。
没有<cstring.h>这样的头文件。
(二)读取/输出方式
1 #include<string> 2 #include<stdio.h> 3 #include<iostream> 4 using namespace std; 5 int main(){ 6 string str,str1; 7 char a[100],b[100]; 8 cin>>str; 9 // scanf("%s",str1);//错误!!!string类型不可以用scanf输入 10 cin>>a; 11 scanf("%s",b); 12 }
同理,string和char数组均可以使用cin/cout进行输入输出操作。但是string不能通过scanf/printf, 以及puts()和gets()进行输入输出操作。而char数组可以。
(三)string类-->char *
首先必须了解,string可以被看成是以字符为元素的一种容器。字符构成序列(字符串)。有时候在字符序列中进行遍历,标准的string类提供了STL容器接口。具有一些
成员函数比如begin()、end(),迭代器可以根据他们进行定位。
注意,与char*不同的是,string不一定以NULL('\0')结束。string长度可以根据length()得到,string可以根据下标访问。所以,不能将string直接赋值给char*。
把string转换为char* 有3种方法:
1.data
如:
string str="abc";
char *p=(char *)str.data();
2.c_str
如:
string str="gdfd";
char *p=str.c_str();
3. copy
如:
string str="hello";
char p[40];
str.copy(p,5,0); //这里5,代表复制几个字符,0代表复制的位置
*(p+5)='\0'; //要手动加上结束符
(四)char[]-->string类
直接赋值即可。
1 #include<string> 2 #include<stdio.h> 3 #include<iostream> 4 using namespace std; 5 int main(){ 6 string str; 7 char p[100]; 8 cin>>p; 9 str=p; 10 cout<<str<<endl; 11 }
暂时这些 以后再添加