【字符串处理、STLset】获取set首元素值的方法

获取set首个元素值的方法

作用:因为STLset有自动排序的功能,所以有时需要获取set的首元素作为字典序最小来进一步处理。
方法:在h.begin()前面加星号*即可获取set首个元素的值

set<char> h;
cout << *h.begin();

例题:字符串化繁为简

image

示例1
输入

()abd

输出

abd

说明
输入字符串里没有被小括号包含的子字符串为"abd",其中每个字符没有等效字符,输出为"abd"。

示例2
输入

(abd)demand(fb)for

输出

aemanaaor

说明
等效字符集为('a','b','d','f'),输入字符串里没有被小括号包含的子字符串集合为 "demandfor",将其中字符替换为字典序最小的等效字符后输出为:"aemanaaor"。

示例3
输入

()happy(xyz)new(wxy)year(t)

输出

happwnewwear

说明
等效字符集为('x','y','z','w'),输入字符串里没有被小括号包含的子字符串集合为"happynewyear",将其中字符替换为字典序最小的等效字符后输出为:"happwnewwear"。

示例4
输入

()abcdefgAC(a)(Ab)(C)

输出

AAcdefgAC

说明
等效字符集为('a','A','b'),输入字符里没有被小括号包含的子字符串集合为"abcdefgAC",将其中字符替换为字典序最小的等效字符后输出为:"AAcdefgAC"。

示例5
输入

never(dont)give(run)up(f)()

输出

devedgivedp

C++代码

// Problem: #OD374. 字符串化繁为简
// Contest: Hydro
// Memory Limit: 256 MB
// Time Limit: 1000 ms
#include <iostream>
#include <set>

using namespace std;
using PII = pair<int, int>;

int n;
set<char> h; // 存等效字符集
string t;    // 存非括号内字符

void solve(string &s)
{
    for (char &x : s)
    {
        if (h.count(x)) cout << *h.begin(); // 输出set的首元素的值
        else cout << x;
    }
}

void get(string &s) // 获取等效字符集
{
    t = "";
    for (int i = 0; i < n; i++) // 获取字符数量>1的字符集合
    {
        if (s[i] == '(')
        {
            int j = i + 1;
            string word = "";
            while (j < n && isalpha(s[j])) word += s[j++];
            if (word.size() > 1)
            {
                for (char &x : word) h.insert(x);
            }
            i = j;
        }
        else if (isalpha(s[i])) t += s[i];
    }
    for (int i = 0; i < n; i++) // 检查字符数量=1的字符集合是否含等效字符
    {
        if (s[i] == '(')
        {
            int j = i + 1;
            if (s[j + 1] == ')')
            {
                char x = s[j];
                if (h.count(tolower(x)) || h.count(toupper(x)))
                {
                    h.insert(x);
                }
            }
        }
    }
}

int main()
{
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    string s;
    cin >> s;
    n = s.size();
    get(s);
    solve(t);
    return 0;
}
posted @   Tshaxz  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
Language: HTML
点击右上角即可分享
微信分享提示