M - Master of Shuangpin(map字符更换字符串模拟)

SDUT 2023 summer team contest(for 22) - 5 - Virtual Judge (vjudge.net)

开三个map简化了代码

用到的stl及相关字符串输入等等:getline输入包含空格的字符串,

s.substr(pos,len),mp.count(x)看是否出现过

:先getline输入一行字符串,再对字符串while循环得出每个字符串并进行操作输出

注意先mp4再mp3再mp2

(此题一开始想用打表做,s.find查找有无该字符串,有的话就进行s.replace更换,但是最后发现find函数可能会将已更换过的字符再合成更换,有点bs了)

#include <bits/stdc++.h>

#define PI 3.14159265358979323
//#define int long long
#define Close ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;

const int N=2e5+10;
const int INF=0x3f3f3f3f;
const int mod=1e9+7;

//typedef pair<int,int> pii;
/*vector<pii> q(N);
vector<int> g[N];
set<int> s1;
map<string,vector<string>> mpp;
unordered_map<int,int> ump;
map<pair<double,double>,int> mmp;*/
string s;
map<string,char> mp2;
map<string,char> mp3;
map<string,char> mp4;
void solve()
{
    mp2["iu"]='q';
    mp2["ei"]='w';
    mp3["uan"]='r';
    mp2["ue"]='t';
    mp2["un"]='y';
    mp2["sh"]='u';
    mp2["ch"]='i';
    mp2["uo"]='o';
    mp2["ie"]='p';
    mp3["ong"]='s';
    mp4["iong"]='s';
    mp2["ai"]='d';
    mp2["en"]='f';
    mp3["eng"]='g';
    mp3["ang"]='h';
    mp2["an"]='j';
    mp3["uai"]='k';
    mp3["ing"]='k';
    mp4["uang"]='l';
    mp4["iang"]='l';
    mp2["ou"]='z';
    mp2["ia"]='x';
    mp2["ua"]='x';
    mp2["ao"]='c';
    mp2["zh"]='v';
    mp2["ui"]='v';
    mp2["in"]='b';
    mp3["iao"]='n';
    mp3["ian"]='m';
    while(getline(cin,s))
    {
        for(int i=0;i<s.size();i++)
        {
            string ss="";
            while(s[i]!=' '&&i<=s.size()-1)
            {
                ss+=s[i];
                i++;
            }
            if(ss.size()==1)    cout<<ss<<ss;
            else if(ss.size()==2)    cout<<ss;
            else if(ss=="ang")  cout<<"ah";
            else if(ss=="eng")   cout<<"eg";
            else if(ss=="ong")  cout<<"os";
            else
            {
            for(int j=0;j<ss.size();j++)
            {
            if(mp4.count(ss.substr(j,4)))
            {
                cout<<mp4[ss.substr(j,4)];
                j+=3;
            }
            else if(mp3.count(ss.substr(j,3)))
            {
                cout<<mp3[ss.substr(j,3)];
                j+=2;
            }
            else if(mp2.count(ss.substr(j,2)))
            {
                cout<<mp2[ss.substr(j,2)];
                j+=1;
            }
            else    cout<<ss[j];
            }
            }
            cout<<" ";
        }
        cout<<endl;
    }
}
signed main()	
{  
	Close  
	int T;
    T=1;
	//cin>>T;
	while(T--)
	{
		solve();
	}
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值