【常用技巧】标准模板库(STL)
【常用技巧】標準模板庫(STL)
在前幾個章節中我們已經使用了諸如隊列、堆、堆棧、vector 等標準模板庫中的模板,切身感受到了它給我們帶來的極大便利。在本節中,我們還要介紹兩種標準模板——string 和 map,了解他們又會給我們帶來怎樣的便利。
string 對象,顧名思義即用來保存和處理字符串的標準模板。我們介紹其相關的操作。
例 8.1 字符串的查找刪除?
時間限制:1 秒? ?內存限制:32 兆?
題目描述
給定一個短字符串(不含空格),再給定若干字符串,在這些字符串中刪除所含有的短字符串。
輸入
輸入只有 1 組數據。 輸入一個短字符串(不含空格),再輸入若干字符串直到文件結束為止。
輸出
刪除輸入的短字符串(不區分大小寫)并去掉空格,輸出。
樣例輸入
in #include int main() { printf(" Hi "); }樣例輸出
注:將字符串中的 In、IN、iN、in 刪除。?
解題代碼
#include<cstdio> #include<string> #include<iostream> #include<ctype.h>using namespace std;int main() {char str[101];gets(str);//輸入短字符串string a = str;//將其保存在a中for (int i = 0; i < a.size(); i++)a[i] = tolower(a[i]);//將a中的字符全部改成小寫while (gets(str))//輸入長字符串 {string b = str, c = b;//將字符串保存至b,cfor (int i = 0; i < b.size(); i++)b[i] = tolower(b[i]);//將b中的字符全部改成小寫,以便匹配int t = b.find(a, 0);//在b中查找a的位置while (t != string::npos)//若查找成功,則重復循環 {c.erase(t, a.size());//刪除c中相應位置字符,c為原串b.erase(t, a.size());//刪除b中相應位置字符,b是改為小寫字符的串t = b.find(a, t);//繼續查找b中下一個出現字符串a的位置 }t = c.find(" ", 0);//查找c中的空格while (t != string::npos){c.erase(t, 1);t = c.find(" ", 0);}//刪除c中所有空格cout << c << endl;}return 0; }上面我們主要討論了string在機試中的用途,接下去我們還要介紹標準模板庫中另一個十分實用的標準對象——map。 其功能為將一個類型的變量映射至另一類型。我們用一個例題,介紹和展示其用處和用法。
例 8.2 產生冠軍
時間限制:1 秒? ?內存限制:32 兆?
題目描述
有一群人,打乒乓球比賽,兩兩捉對撕殺,每兩個人之間最多打一場比賽。
球賽的規則如下:如果 A 打敗了 B,B 又打敗了 C,而 A 與 C 之間沒有進行過比賽,那么就認定,A一定能打敗 C。
如果 A 打敗了 B,B 又打敗了 C,而且,C 又打敗了 A,那么 A、B、C 三 者都不可能成為冠軍。
根據這個規則,無需循環較量,或許就能確定冠軍。你的任務就是面對一群比賽選手,在經過了若干場撕殺之后,確定是否已經實際上產生了冠軍。
輸入
輸入含有一些選手群,每群選手都以一個整數 n(n<1000)開頭,后跟 n 對選手的比賽結果,比賽結果以一對選手名字(中間隔一空格)表示,前者戰勝后者。 如果 n 為 0,則表示輸入結束。
輸出
對于每個選手群,若你判斷出產生了冠軍,則在一行中輸出“Yes”,否則在一行中輸出“No”。
樣例輸入
3 Alice Bob Smith John Alice Smith 5 a c c d d e b e a d 0樣例輸出
Yes No解題代碼
學完圖之后再來寫。
?
轉載于:https://www.cnblogs.com/yun-an/p/11076162.html
總結
以上是生活随笔為你收集整理的【常用技巧】标准模板库(STL)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Zend Framework学习之Zen
- 下一篇: [ios]UITableViewCell