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 }
暫時這些 以后再添加