C++中string類常見用法


string,主要用於字符串處理

 

1、字符串的輸入

讀入和輸出整個字符串,只能用cin和cout

輸入一個字符串s, 如果字符串中有空格 不能用cin,要使用getline(cin,s)

其中,getline()函數定義在<string>頭文件中

 

2、字符/字符串與數值轉換(C++11)

字符轉化成int型用stoi(s[i])或者s[i]-'0'

stoi(s)將字符串轉換成int型數值

 

將數值型轉換成string型 用to_string

eg:to_string(num)將數值類型的變量轉換成string類型

 

3、字符串的插入insert()

1)eg:s.insert(1,1,c);

向s的標號為1的位置插入1個字符c

 

2)eg:str1.insert(2,str2,0,4);

將str2腳標0開始的連續4個字符插入到str1腳標2開始的地方

 

4、字符串匹配查找find()

1)s1.find(s2[i])==string::nops 表示在s1中找不到s2[i]這個字符 返回nops

應用到兩個字符串去重的問題中,可以定義string str  利用字符串的拼接將最后需要輸出的內容全部存在str 直接輸出即可

 

2)

string str;

int pos;

int index=s.find(string  str,  int  pos)

如果find()函數中除了有被找尋的字符串,還有一位整型數,表示從該位置開始遍歷被搜索的字符串,已找到被找尋的字符串。返回的index是str在s中第一次出現的位置

 

類比:

map<string,bool>op

在map中 使用op.count(dem[i])==1在op中查找是否有key為dem[i]的元素

 

5、轉換函數to_

tolower(char/int型變量),不能將整個string一起轉換

 

6、跟string有關的頭文件區分

#include <cstring>   //不可以定義string s;可以用到strcpy等函數

using   namespace   std;

 

#include <string>   //可以定義string s;可以用到strcpy等函數

using   namesapce   std;

 

#include <string.h>   //不可以定義string s;可以用到strcpy等函數

 

7、字符串長度

在字符串中length()函數和size()函數具有同樣的效果

 

8、getchar()

定義在<stdio>頭文件中

getline()之前需要用getchar()吸收空白符,清除緩存區

 

getchar函數功能:

從stdio流中讀字符,相當於getc(stdin),它從標准輸入里讀取下一個字符。返回類型為int型,返回值為用戶輸入的ASCⅡ碼,出錯返回-1。

 

具體說明:

1)從緩沖區讀走一個字符(相當於清除緩沖區);

2)前面的scanf()在讀取輸入時會在緩沖區中留下一個字符'\n'(輸入完s[i]的值后按回車鍵所致),所以如果不在此加一個getchar()把這個回車符取走的話,gets()就不會等待從鍵盤鍵入字符,而是會直接取走這個“無用的”回車符,從而導致讀取有誤;

3)getchar()是在輸入緩沖區順序讀入一個字符(包括空格、回車和Tab),getchar()使用不方便,解決方法: 

  • 使用下面的語句清除回車: while(getchar()!='\n'); 
  • 用getche()或getch()代替getchar(),其作用是從鍵盤讀入一個字符(不用按回車),注意要包含頭文件<conio.h>

 

9、gets()函數getline()

1)gets()是C中的函數,定義在stdio頭文件 而不是string.h頭文件

只能在遇到回車或者EOF結束輸入 所以gets函數可以用於輸入帶有空格的字符串。

 eg:

char a[100];

gets(a);//gets函數可以直接獲得一個數組

 

2)getline()是c++中的函數,包含在string頭文件里, 與gets()函數功能相似,但是能自定義結束符。

 

10、strtok 分割字符串為一組字符串

1)要使用strtok函數需要包含頭文件<string.h>

或者#include <cstring>

2)strtok函數的作用是把字符串以規定的字符分割開:

本質上是將字符串分段,並且除去間隔字符,進行存儲

 eg:

char *p;

p = strtok(buf, "$");

p為指針,buf也是指針。這句代碼的意思就是把buf中的字符串以"$"為分隔符分割開來,分割出來的字符串保存到指針p中。

 

3)再次調用strtok函數時,把buf換成NULL,不需要再寫buf。已經分割掉的單位部分用buf字符串上脫落,strtok函數會把分割前的字符串破壞掉,即每次分割后,原來的字符串就會少掉一部分,完整性會被破壞。

p = strtok(NULL, "$");

 

4)p = strtok(buf, "$,");

這句代碼的意思是以"$"和","為分隔符分割buf中的字符串。每當遇到這兩個字符其中一個都會分割,不是遇到"$,"兩個字符連在一起才分割

 

11、獲得字符串的子串substr()

#include<string>

#include<iostream>

using namespace std;

int main()

{

  string s("12345asdf");

  string a = s.substr(0,5);//獲得字符串s中從第0位開始的長度為5的字符串

  cout << a << endl;

}

輸出結果為:12345

 

12、刪除字符串的子串erase()

1)str.erase(pos,n); 刪除從pos開始的n個字符,比如erase(0,1)就是刪除第一個字符

 

2)去掉字符串的哪一個字符

s2.erase(s2.begin());  //去掉第一個元素

s2.erase(s2.end() - 1); //去掉最后一個元素  end()指向結尾的下一個

 

13、字符串替換函數replace

res[i].replace(pos1, s.length(), d.count(s) ? d[s] : "");

//字符串res[i]從pos1開始s.length()長的子串替換成d[s]或""

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM