zoukankan      html  css  js  c++  java
  • 【常用技巧】标准模板库(STL)

    【常用技巧】标准模板库(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 

    解题代码

    学完图之后再来写。

  • 相关阅读:
    .net log4dll的使用
    Myslq 5.7安装
    接口和抽象类有什么区别
    monkey测试
    JDK、Jmeter、Android环境变量配置
    聊天室
    tushrea知识笔记
    爬取图片
    python gui之tkinter事件处理
    ttk.Treeview
  • 原文地址:https://www.cnblogs.com/yun-an/p/11076162.html
Copyright © 2011-2022 走看看