CCF-模板生成系统

这题考的就是字符串的操作,不用stl也可以做,但会比较麻烦。

写了一个用了string和vector< pair<string,string> >的90分版本,最后一个用例是运行超时。不知道是stl的操作耗费太多时间还是算法逻辑上有疏漏。

这里先放上90分版本,以后有时间再修正

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
string get_key(vector< pair<string, string> > key, string target);
int main()
{
	vector<string> model;
	vector< pair<string, string> > key;
	int m, n;
	cin >> m >> n;
	getchar();
	model.resize(m);
	int l = 0;
	while (m--)
	{
		string temp;
		getline(cin, temp);
		model[l++] = temp;
	}
	key.resize(n);
	l = 0;
	while (n--)
	{
		string temp0;
		string temp1;
		cin >> temp0;
		getchar();
		getline(cin, temp1);
		int label;
		while ((label = temp1.find("\"")) != -1)
		{
			temp1.erase(label, 1);
		}
		key[l].first += temp0;
		key[l++].second += temp1;
	}
	for (size_t i = 0; i < model.size(); i++)
	{
		int label;
		while ((label = model[i].find("{{")) != -1)
		{
			int label_end = model[i].find("}");
			label_end += 2;
			int label_temp = label + 3;
			string temp0 = "";
			string temp1;
			while (model[i][label_temp] != ' ')
			{
				temp0 += model[i][label_temp];
				label_temp++;
			}
			temp1 = get_key(key,temp0);
			model[i].erase(label + model[i].begin(), label_end + model[i].begin());
			model[i].insert(label, temp1);
		}
	}
	for (size_t i = 0; i < model.size(); i++)
	{
		cout << model[i] << endl;
	}
	getchar();
	getchar();
}
string get_key(vector< pair<string, string> > key, string target)
{
	for (int i = 0; i < key.size(); i++)
	{
		if (key[i].first == target)
		{
			return key[i].second;
		}
		
	}
	return "";
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值