C++:string類(十六章)

構(gòu)造函數(shù)

  1. 構(gòu)造函數(shù):string(const char* s)
    字符指針
string s2("I am s2!!");
cout<<"s2 : "<<s2<<endl;
  1. 構(gòu)造函數(shù):string(size_type n,char c)
    重復(fù)char字符n次
string s3('$',15);
cout<<"s3 : "<<s3<<endl;

3.構(gòu)造函數(shù):string(const string& str)
復(fù)制構(gòu)造函數(shù)

string s4(s2);
cout<<"s4 : "<<s4<<endl;
  1. 構(gòu)造函數(shù):string()
    默認(rèn)構(gòu)造函數(shù)
string s1;
cout<<"s1 : "<<s1<<endl;
  1. 構(gòu)造函數(shù):string(const char* s,size_type n)
    字符串的前n個(gè)字符(如果是 string參數(shù),則賦值的是后面n個(gè)字符串)
string s5("I am a master",4);
cout<<"s5 : "<<s5<<endl;
  1. 構(gòu)造函數(shù):string(begin,end)
    如果是數(shù)組可以直接這樣,因?yàn)閿?shù)組名就是首字符地址。但是string對(duì)象則不能,因?yàn)椴槐硎镜刂?,所?amp;string[n]
char arr[]="I am Jeff and I am cool";
string s6(arr+5,arr+23);
cout<<"s6 : "<<s6<<endl;
string s7(&s6[5],&s6[10]);
cout<<"s7 : "<<s7<<endl;
  1. 構(gòu)造函數(shù):string(const string& str,size_type pos=0,size_type n=npos)
    從pos個(gè)字符開(kāi)始,到n個(gè)字符結(jié)束。 npos表示字符串末尾。
string s8(s6,2,10);
cout<<"s8 : "<<s8<<endl;

功能

s1 +="I am Jeff ";               += 重載運(yùn)算符
cout<<"s1 now :"<<s1<<endl; 
s1[0] = 'i';                          []重載運(yùn)算符
cout<<"s1 now :"<<s1<<endl;
s1 = s2+s3;                       +和=重載運(yùn)算符
cout<<"s1 now :"<<s1<<endl;
s1 ="I am Jeff";                 
cout<<"s1 now :"<<s1<<endl;
s1 = s1+", who are you?";
cout<<"s1 now :"<<s1<<endl;

輸入

C風(fēng)格字符串

    char info1[100],info2[100],info3[100];
    cin>>info1; 讀取一個(gè)字符
    cin.getline(info2,100);  丟棄\n
    cin.get(info3,100);  將\n留在隊(duì)列
    cout<<"info1 :"<<info1<<endl;  
    cout<<"info2 :"<<info2<<endl;
    cout<<"info3 :"<<info3<<endl;
image.png

string風(fēng)格

    string str1,str2;
    cin>>str1;        讀取一個(gè)詞,而不是一個(gè)character
    getline(cin,str2);      讀取一行,刪除\n
cin.getline(info1,100,':')
getline(cin,str1,':') 
確定邊界字符,然后該字符會(huì)被刪除
  1. C風(fēng)格字符串,cin是調(diào)用對(duì)象。 cin.operator>>(info1)
    string字符串,string是調(diào)用對(duì)象. operator>>(cin,str1)
  2. getline有三種情況會(huì)被stop:
  • 到達(dá)文件尾,輸入流eofbit被設(shè)置,fail()和eof()會(huì)返回true
  • 遇到分界字符,分界字符從輸入流刪除,但不存儲(chǔ)它
  • 讀取字符達(dá)到最大值(string::npos和可供分配內(nèi)存字節(jié)數(shù)中較小一個(gè)),將設(shè)置輸入流的failbit,fail()將返回true
  1. string的operator>>()函數(shù)遇到空白字符就會(huì)停止,并將空白字符符留在隊(duì)列中

使用字符串

1. 比較字符串大小
2. 確定字符串長(zhǎng)度【size()或者length()】
3. find()方法重載

size_type find(const string& str, size_type pos=0) const
從pos位置查找子字符串str,如果找到則返回首字符出現(xiàn)的位置。否則返回string::npos

size_type find(const char* s, size_type pos=0) const
同上

size_type find(const char* s,size_type pos=0, size_type n)
從pos位置開(kāi)始,查找s前n個(gè)字符組成的子字符串,如果找到返回首字符位置,沒(méi)找到返回string::npos

size_type find(char ch,size_type pos=0) const
從pos開(kāi)始,查找ch。

find_first_of("hark")
就是找hark單詞里的四個(gè)字符,如果出現(xiàn)某一個(gè)字符就返回首次出現(xiàn)的位置。

find_last_of("hark")
返回最后一次出現(xiàn)相關(guān)字符的位置

find_first_not_of(“xxx")

str1.find(ch) != string::npos為true的時(shí)候就是該字符存在于字符串內(nèi)。

4. 查看分配的內(nèi)存塊大小
capacity()
reserve(size) 【請(qǐng)求內(nèi)存塊最小長(zhǎng)度】

實(shí)際上C++分配的內(nèi)存塊大小比字符串要大,如果字符串不斷增大,C++將分配一個(gè)兩倍大的內(nèi)存塊

5. 返回一個(gè)指向C-風(fēng)格字符串的指針
c_str()

……還有很多很多功能

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容