问答类网站开发,自助建站软件公司,企业建设网站价格单,wordpress下载页面模板题目描述
思路讲解
本题是一个简单的字符串模拟题#xff0c;这种题目是csp认证第三题的常客
大致思路是用两个bool数组记录某一个选项#xff08;0--25下标对应小写字母a--z#xff09;#xff0c;第一个数组中无参选项为true#xff0c;第二个数组中有参选项为true这种题目是csp认证第三题的常客
大致思路是用两个bool数组记录某一个选项0--25下标对应小写字母a--z第一个数组中无参选项为true第二个数组中有参选项为true比如说假如st1[0]falsest2[0]false意思是下面的命令中不能出现-a的选项包括有参和无参
对于每一个命令首先进行字符串的分割分割方式推荐使用stringstream技术具体看下面的文章
stringstream基础使用类型转换、分割字符串
分割之后遍历每一个连续字符串排除不合法情况把有参的选项的参数找到并记录最后统一输出即可详细看下面的代码和注释
满分代码和注释
#includeiostream
#includestring
#includevector
#includesstream
using namespace std;
const int N30;
bool st1[N];//无参记录
bool st2[N];//有参记录
string ans[N];//每一个选项对应的参数
int main()
{string str;cinstr;for(int i0;istr.length();i)//预处理bool数组 if(i1str.length()str[i1]:)st2[str[i]-a]true,i;else st1[str[i]-a]true; int n;cinn;getchar();//吸收回车因为下面有getline for(int i1;in;i){ getline(cin,str);printf(Case %d:,i);vectorstringsp;stringstream ss(str);while(ssstr)sp.push_back(str);//分割字符串至vector中 for(int j0;j26;j)ans[j].clear();//清空每一个样例的答案 for(int j1;jsp.size();j){if(sp[j][0]!-||sp[j][1]a||sp[j].length()!2)break;//不符合选项的要求//sp[j][1]a意思是第二位不是小写字母因为数字和减号的ASCII码值均小于aint ksp[j][1]-a;if(st1[k])ans[k]#;//随便的值只要长度大于0就可以与没出现过的选项区分else if(st2[k]j1sp.size())j,ans[k]sp[j];else break; }for(int j0;j26;j){if(ans[j].size()){cout -(char)(ja);if(st2[j])cout ans[j];}}coutendl;}return 0;
}