使用STL從字串中刪除所有指定字元


STL 基本上代表標準模板庫 (Standard Template Library),它是一個預先編寫的程式碼集合,經常用於資料結構和演算法中。它由孟李和亞歷山大·斯特帕諾夫於20世紀90年代初開發。

它主要由三個元件組成:容器、演算法和迭代器。容器是儲存和操作資料的物件,例如列表、向量、集合、對映和棧。演算法是在容器中儲存的資料上工作的函式,例如搜尋、排序和資料操作。迭代器是輕鬆遍歷容器元素的物件。

STL已成為競賽程式設計的重要組成部分,它也提供了高效且健壯的程式碼。

#include <iostream> 
#include <string> 

using namespace std; 
int main() { 
   string a = "Hello, world!"; 
   cout << a << endl; 
   return 0; 
} 

輸出

Hello, world!

演算法

  • 宣告一個字串和要刪除的字元。然後將它們儲存在一個變數中。

  • 迴圈遍歷字串中的每個字元。

  • 檢查當前字元是否與要刪除的字元匹配。

  • 重複上述兩個步驟,直到刪除所有出現的字元。

  • 列印修改後的字串。

方法

  • 方法1 - 使用remove()和erase()函式。

  • 方法2 - 使用remove_if()和erase()函式。

  • 方法3 - 使用find()和erase()函式。

使用STL從字串中刪除所有指定字元的方法有很多。以下列出了一些可能的方法 -

方法1:使用remove()和erase()函式

Remove() 演算法定義在標頭檔案中。它從範圍內刪除值,在本例中,它將是您要刪除的字元,並將返回指向序列新末尾的迭代器。

該函式僅將元素移動到範圍的末尾並提供指向新末尾的迭代器,它實際上並沒有將它們從容器中刪除。

C++ STL中的Erase()函式用於從容器中刪除元素。它根據容器的型別(向量或字串)接受兩個引數。

erase()函式從起始索引處刪除“count”個字元。“count”未指定則從索引到字串末尾刪除所有字元。

示例

#include <iostream>
#include <string>
#include <algorithm>
 using namespace std;
int main() {
   string str = "hello world!";
   char ch = 'l';
   // Use remove() to remove all occurrences of the character.
   str.erase(remove(str.begin(), str.end(), ch), str.end());
   cout << str << endl;
   return 0;
}

輸出

heo word!

方法2:使用remove_if()和erase()函式

C++ STL中的'remove_if()'類似於remove()函式,但它只在滿足指定條件時才從容器中刪除字元。

remove_if()方法刪除範圍[first, last)中所有滿足條件p的元素。一元謂詞p是一個函式或函式物件,它從容器的元素中獲取單個引數,並返回一個布林值,指示是否應刪除該元素。

示例

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main() {
   string str = "hello world!";
   char ch = 'l';
   str.erase(remove_if(str.begin(), str.end(), [=](char c) { return c == ch; }), str.end());
   cout << str << endl;
   return 0;
}

輸出

heo word!

方法3:使用迴圈和erase()函式

在這種方法中,其思想是使用迴圈迭代字串並逐個刪除每個出現的字元。

在這種方法中,for迴圈用於迭代整個字串,逐個檢查每個字元是否與需要刪除的字元匹配。如果匹配,則將該字元從字串中刪除;否則,將繼續進行下一個字元。

示例

#include <iostream>
#include <string>
using namespace std;
int main() {
   string str = "hello world!";
   char ch = 'o';
   // Use a loop to remove all occurrences of the character
   for (int i = 0; i < str.length(); ) {
      if (str[i] == ch) {
         str.erase(i, 1);
      } else {
         ++i;
      }
   }
   cout << str << endl;
   return 0;
}

輸出

 hell wrld!

結論

總之,C++ STL庫提供了快速簡便的方法來刪除字串中所有出現的特定字元。只需幾行程式碼,我們就可以使用STL的erase()、remove()和remove_if()函式刪除字串中所有出現的特定字元。

在C++中使用STL有很多好處,包括易用性、效率和可重用性。總的來說,它是一個強大的庫,有助於編寫可靠、高效的程式碼。

更新於:2023年7月20日

2K+ 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告