虚拟游戏世界实体分析
2016-03-26 16:40
405 查看
题目1 : 虚拟游戏世界实体分析
时间限制:5000ms单点时限:1000ms
内存限制:256MB
描述
虚拟游戏世界里面有很多实体,实体可能由很多子实体或者子属性构成。由于实体之间可能有非常之多的嵌套,查询某个实体或者属性属于第几层嵌套,以便将来对虚拟世界的修改和展示是一项待解决的问题,作为未来的虚拟世界分析员,你能用程序解决这个问题吗?
输入
输入数据可能由多组数据构成,每组数据由两行构成:第一行是对虚拟世界的描述,实体或者属性由英文字母或者数字构成,子实体和子属性紧接着父实体嵌套在{}中,兄弟实体或者属性用“,”分隔。
第二行是要查询的属性或者实体,有且仅有一个。
注意数据输入可能很大。
输出
输出为查询的实体或者属性的层数;如果属性不存在,输出-1;如果有多个结果满足查询,请从小到大输出所有去重之后的结果,用”,”分隔样例输入
Fruit{apple{shape,color},orange{taste,price}} Fruit Fruit{apple{shape,color},orange{taste,price}} orange Fruit{apple{shape,color},orange{color,price},color} color
样例输出
1 2 2,3
分析:
本题就是一个常规字符串处理题,找每个string的分割点,遇到{将层级加1,遇到}层级减1,然后匹配统计输出。
代码:
#include <iostream> #include <string> #include <vector> #include <string.h> using namespace std; struct OA { string name; int level; OA(string s,int l) { name = s; level = l; } }; vector<OA> VCWD; void add2vec(string s,int level)//将对象放入vector中 { const OA temp(s,level); auto it=VCWD.begin(); for(;it!=VCWD.end();it++)//查找vector中是否已经存在实体和层数相同的元素 { if(s == it->name && level == it->level) break; } if(VCWD.empty() || it == VCWD.end())//若不存在则添加 VCWD.push_back(temp); } void dealstringlevel(string &str, string word) { const char * strc = str.c_str();//转化string为const char * 方便处理 int level=1; string s = "";//暂存临时字符串 for(string::size_type i=0;i<str.length();i++) { if(strc[i] !='{'&&strc[i] !='}'&&strc[i] !=',') { s +=strc[i];//统计实体名 } else { if(s.length()) { add2vec(s,level); s = ""; } if(strc[i] =='{')//处理层级 level++; else if(strc[i] =='}') level--; } } for(auto it = VCWD.end()-1;it!=VCWD.begin()-1;it--) { if(it->name == word) cout << it->level<< " "; } cout << endl; } int main() { string one = "Fruit{apple{shape,color},orange{taste,price}}"; string two = "Fruit{apple{shape,color},orange{taste,price}}"; string three = "Fruit{apple{shape,color},orange{color,price},color}"; string word1 = "Fruit"; string word2 = "orange"; string word3 = "color"; dealstringlevel(one,word1); dealstringlevel(two,word2); dealstringlevel(three,word3); return 0; }
相关文章推荐
- PPT斜角标签怎么制作
- 3月26日html(七)window document
- Storm在zookeeper上的目录结构
- PHP 请求转发(CURL)
- 单例模式-java描述
- wrap_content和match_parent/fill_parent
- c#---List共享空间的情况
- smarty模板引擎_7-自定义函数
- 第五次课作业(进度管理、成本管理)
- orientation
- WPF使用菜单实现页面跳转
- bitmap与bloomfilter(比较清晰的讲解)
- 修路方案
- Unity 通过计算定点绘制图形
- 寻找第K大的数的方法总结
- MFC-文件对话框
- 数组1--求一个数的最大子数组
- 四则运算3
- 软件工程个人作业03
- storm操作zookeeper源码分析-cluster.clj