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]或""