当前位置: 代码迷 >> 综合 >> PAT 1052 卖个萌 (20 分)(为什么scanf出错?)
  详细解决方案

PAT 1052 卖个萌 (20 分)(为什么scanf出错?)

热度:36   发布时间:2023-11-24 12:09:31.0

题目传送门<==戳这

一开始我用的scanf格式化输入发现只能输入样例第一行
后来才发现可能会有空格。而scanf不能读入空格,因此不能用scanf。

选择用getline一次性读入一整行的字符串,然后运用双指针思想,分别指向 ’ [ ’ 和 ’ ] ’
再用substr截取括号内的部分,并用vector储存(长度不确定,不好开数组)。
又因为有三行输入,所以采用 vector<vector< string > > 嵌套。

上代码:

#include <iostream>
#include <cstdio>
#include <vector>
#include <string>
using namespace std;
int main(){
    vector<vector<string> >v;	//vector嵌套for(int i=1;i<=3;i++){
    string s;getline(cin,s);int j=0,k=0;					//左(j)右(k)指针vector<string> v1;				//临时vectorwhile(j<s.length()){
    			//外层循环,左指针移动if(s[j]=='['){
    k++;while(k<s.length()){
        //内层循环,右指针移动if(s[k]==']'){
    v1.push_back(s.substr(j+1,k-j-1));break;}k++;}}j++;}v.push_back(v1);}int n;cin>>n;int a,b,c,d,e;for(int i=1;i<=n;i++){
    cin>>a>>b>>c>>d>>e;if(a>v[0].size()||b>v[1].size()||c>v[2].size()||d>v[1].size()||e>v[0].size()||a<1||b<1||c<1||d<1||e<1)printf("Are you kidding me? @\\/@\n");//注意为什么要减 1 ,因为vector下标从 0 开始else cout <<v[0][a-1]<<"("<<v[1][b-1]<<v[2][c-1]<<v[1][d-1]<<")"<<v[0][e-1]<<endl;	}
}
  相关解决方案