一、什麼是string::npos
在C++中,string類是文本處理方面非常常用的一種數據類型。在使用string類進行字元串的處理時,我們可能經常需要判斷某個子串是否存在於另一個字元串中,或者查找某個字元串在另一個字元串中出現的位置等等。這時,我們就會用到string::npos。
string::npos是一個靜態成員常量,定義在string類中,它的值為-1,即一個非法的位置指示器。
static const size_t npos = -1;
二、string::npos的使用方法
當我們需要查找一個字元串在另一個字元串中出現的位置時,可以使用string中的find()函數。
string str = "hello world";
size_t found = str.find("world");
if(found != string::npos){
cout << "Found 'world' at position: " << found << endl;
}
else{
cout << "Not found." << endl;
}
在上述代碼中,find()函數返回一個size_t類型的值,表示查找結果在主串中的下標位置。如果查找成功,則返回子串在主串中的起始位置;如果查找失敗,則返回string::npos。
string::npos還可以用於指示子串的結尾位置。比如,我們可以通過在find()函數中指定查找的起始位置,來進行多次查找。
string str = "hello world";
size_t pos = 0;
while((pos = str.find("o", pos)) != string::npos){
cout << pos << '\n';
++pos;
}
在上述代碼中,我們通過while循環的方式查找字元串中’o’出現的所有位置,pos變數起到遍歷字元串的作用,每次記錄上一個’o’出現位置的下一個位置。
三、常見應用場景
1. 查找字元串中是否包含某個子串
通過string::npos來實現查找,如果返回的下標不是-1,則表示查找到子串。
if(str.find(sub_str) != string::npos){
// 包含,do somthing
}
else{
// 不包含,do something else
}
2. 查找字元串中某個子串出現的次數
遍歷字元串,每次調用find()函數查找某個子串,直到查找失敗為止,可以統計出子串在字元串中出現的次數。
int count = 0;
size_t pos = 0;
while((pos = str.find(sub_str, pos)) != string::npos){
++count;
++pos;
}
3. 替換字元串中所有的某個子串
通過find()函數和replace()函數實現,每次找到子串後,再用replace()函數將其替換成新的字元串。
size_t pos = 0;
while((pos = str.find(sub_str, pos)) != string::npos){
str.replace(pos, sub_str.size(), new_str);
pos += new_str.size();
}
4. 截取字元串的某一部分
通過substr()函數來實現截取字元串的某一部分,可以指定截取的起始位置和長度。
string sub_str = str.substr(start_pos, len);
5. 消除字元串首尾的空格
通過find_first_not_of()和find_last_not_of()函數來實現。分別從字元串的起始和結尾進行查找,找到第一個非空格字元和最後一個非空格字元的位置,然後再通過substr()函數來截取字元串。
size_t start_pos = str.find_first_not_of(" ");
size_t end_pos = str.find_last_not_of(" ");
string new_str = str.substr(start_pos, end_pos - start_pos + 1);
總結
通過string::npos常量,我們可以方便地進行字元串的查找、替換和截取等操作,是C++中處理字元串常用的工具之一。
原創文章,作者:VQRGD,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/331133.html
微信掃一掃
支付寶掃一掃