标签:03 tem map int ans 2014 include string
思路:沉下心来认真读题就行了,注意边界情况,map<key,value>是根据key值自动从小到大排序的,对于这个题很合适,使用map最后直接遍历就行了。
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<map>
#include<cstring>
using namespace std;
const int N = 1005;
string getnow(string s,int &num)//以空格为分界符截取一个字符串
{
if(num>=s.size())
return NULL;
string ans;
while(s[num]!=' '&&num<s.size())
ans+=s[num++];
num++;
return ans;
}
int main()
{
map<char,int> mp;
map<string,string> ans;
map<string,string>::iterator it; //迭代器,用来遍历map
string s;
cin>>s;
for(int i=0;i<s.size();i++)
{
if(i+1<s.size()&&s[i+1]==':') //mp值为2代表有参数,为1代表没参数
mp[s[i]]=2,i++;
else
mp[s[i]]=1;
}
int t;
cin>>t;
getchar(); //没有getchar会出错,因为前一个字符串后面还有一个换行符,如果不吃掉换行符,getline函数会读取这个换行符
for(int cas=1;cas<=t;cas++)
{
ans.clear(); //初始化
string tem;
getline(cin,tem);
int i=0;
string xxx=getnow(tem,i);
while(i<tem.size())
{
string s1=getnow(tem,i);
// cout<<"s="<<s1<<" "<<mp[s1[1]]<<endl;
if(s1.size()<1||s1[0]!='-'||!mp[s1[1]]||s1.size()>2) //如果不是选项,跳出
break;
else if(mp[s1[1]]==2)
{
if(i>=tem.size()) break; //如果是带参数的但是后面没有字符串了,跳出
string s2=getnow(tem,i);
ans[s1]=s2;
}
else
ans[s1]="#";
}
printf("Case %d:",cas);
for(it=ans.begin();it!=ans.end();it++)
{
cout<<" "<<it->first;
string ss=it->second;
if(ss!="#")
cout<<" "<<ss;
}
cout<<endl;
}
return 0;
}
标签:03,tem,map,int,ans,2014,include,string 来源: https://blog.csdn.net/weixin_43693379/article/details/115322293
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。