Bug Hunt【STL】

一道比较简单的STL练习题。

开2个map 一个存数组大小,一个map<string,map<int,int>>存数组的元素是否存在以及值

输入不存在负数的情况,,纯代码题

#include<cstdio>#include<cstring>#include<map>#include<vector>#include<string>#include<queue>#include<iostream>#include<stack>using namespace std;const int maxn = 101;char str[maxn];int cases = 1;int ans = 0;map<string,int>arr_size;//数组的大小map<string,map<int,int> >arr; //数组的元素int dfs(char *s,int a,int b){char name[maxn];int pos = 0;for(int i = a; i < b; i++){if(s[i] != '[')name[pos++] = s[i];else{int e = dfs(s,i + 1,b – 1);//数组下标if(e < 0) return -1;string sstr(name,0,pos);//数组名称int ssize = arr_size[sstr];//数组大小if(ssize < e) return -1;if(!arr[sstr].count(e))return -1;return arr[sstr][e];}}int re = 0;for(int i = 0; i < pos; i++)re = re * 10 + name[i] – '0';return re;}//鉴定语句int judge(char *s,int l){int value = 0,pos = 0;char name[maxn];for(int i = 0; i < l; i++){if(s[i] == '=')return i;//返回等号的位置else if(s[i] >= '0' && s[i] <= '9')value = value * 10 + s[i] – '0';else if(s[i] != '[' && s[i] != ']')name[pos++] = s[i];}string na(name,0,pos);arr_size[na] = value;return -1;}bool solve(char *str){char name[maxn];int pos = 0;int L = strlen(str);int op = judge(str,L);if(op >= 0){pos = 0;for(int i = 0; i < L; i++)if(str[i]!= '[') name[pos++] = str[i];else break;int e1 = dfs(str,pos + 1,op – 1);int e2 = dfs(str,op + 1,L);string my(name,0,pos);int ssize = arr_size[my];if(e1 == -1 || e2 == -1 || e1 >= ssize)if(!ans) ans = cases;elsearr[my][e1] = e2;}}int main(){while(scanf("%s",str) && str[0] != '.'){cases = 1;ans = 0;arr_size.clear();arr.clear();solve(str);while(scanf("%s",str) && str[0] != '.'){cases ++;solve(str);}printf("%d\n",ans);}return 0;}

吃水不忘挖井人。

Bug Hunt【STL】

相关文章:

你感兴趣的文章:

标签云: