【常用技巧】标准模板库(STL)

it2022-05-05  207

【常用技巧】标准模板库(STL)

在前几个章节中我们已经使用了诸如队列、堆、堆栈、vector 等标准模板库中的模板,切身感受到了它给我们带来的极大便利。在本节中,我们还要介绍两种标准模板——string 和 map,了解他们又会给我们带来怎样的便利。

string 对象,顾名思义即用来保存和处理字符串的标准模板。我们介绍其相关的操作。

例 8.1 字符串的查找删除 

时间限制:1 秒   内存限制:32 兆 

题目描述

给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。

输入

输入只有 1 组数据。 输入一个短字符串(不含空格),再输入若干字符串直到文件结束为止。

输出

删除输入的短字符串(不区分大小写)并去掉空格,输出。

样例输入

in #include int main() { printf(" Hi "); }

样例输出

#clude tma() { prtf("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,c for (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


最新回复(0)