由于做完笔试后,回忆的题目,所以表达可能和原题有所出入,且事后没有case,所以不知程序鲁棒性高不高。
题目大体意思是这样,解析json文件
json内容类似于字典,输入字符串
{"fish":"blue","red":"reb"}
再输入fish显示blue,也就是说一个key对应一个val。
首先肯定需要解析字符串,我的思路是先按照字符‘,’分割,再按照字符串“\":\"”分割,再按照“\””分割,注意,\是转义,下面贴上我的代码,case没有全过。
#include<string>
#include<iostream>
#include<map>
#include<vector>
using namespace std;
vector<string> split(const string &s, const string &seperator) {
vector<string> result;
typedef string::size_type string_size;
string_size i = 0;
while (i != s.size()) {
//找到字符串中首个不等于分隔符的字母;
int flag = 0;
while (i != s.size() && flag == 0) {
flag = 1;
for (string_size x = 0; x < seperator.size(); ++x)
if (s[i] == seperator[x]) {
++i;
flag = 0;
break;
}
}
//找到又一个分隔符,将两个分隔符之间的字符串取出;
flag = 0;
string_size j = i;
while (j != s.size() && flag == 0) {
for (string_size x = 0; x < seperator.size(); ++x)
if (s[j] == seperator[x]) {
flag = 1;
break;
}
if (flag == 0)
++j;
}
if (i != j) {
result.push_back(s.substr(i, j - i));
i = j;
}
}
return result;
}
int main()
{
string input;
map<string, string> mapJson;//c++map的用法,用来定义一个哈希表
while (getline(cin, input))
{
if (input.empty())break;
vector<string> json = split(input, "\,");//首先将字符串按照‘,’分割
for (int i = 0; i < json.size(); i++)
{
int start, mid, end;
start = json[i].find('\"');//找到字符串里面的第一个”
mid = json[i].find("\":\"");//找到中间的位置
end = json[i].rfind('\"');//找到最后的位置
//cout << "start=" << start << "mid=" << mid << "end=" << end << endl;
string key = json[i].substr(start + 1, mid - start - 1);
string val = json[i].substr(mid + 3, end - mid - 3);
//cout << key << " and " << val << endl;
mapJson.insert(pair<string, string>(key, val));//加入哈希表
}
}
string ok;
getline(cin,ok);
cout << mapJson[ok] << endl;
system("pause");
return 0;
}