首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

面试上机题:难度极大的字符串处理有关问题

2012-02-14 
面试上机题:难度极大的字符串处理问题有如下一个字符串:expression{phase1{parameter1}phase2{paramete

面试上机题:难度极大的字符串处理问题
有如下一个字符串:
expression={phase1={parameter1}   phase2={parameter2}}
各项参数都为字符串类型。
要求能够分别解析出   phase1、parameter1、phase2、parameter2

例如:select={name={zhanghong,liwen}   age={22,23}}
解析结果为:zhanghong、liwen、22、23

现在需要处理的是恶意输入:
select={name={zhanghong,liwen,age={name={zhanghong,liwen}}   age={22,23}}
这个怎么才能解析并查错呢。(上机要求:2小时内写出本题处理程序,并能够对恶意输入进行识别并报错,正确输入需要输出所有解析值。并阐述处理思路方法)

[解决办法]
请问恶意输入是不是只有这一种 只有这种应该很好处理
#include <iostream>
#include <string>
#include <ctype>
using namespace std;
string *analysis(char *exp)
{
int k=0;int t=0; string temp;string str1[20];
string *str2=str2=new string[20];
for(int i=0;i <strlen(exp);i++)
{
if(exp[i]!= '= '&&exp[i]!= '{ '&&exp[i]!= '} '&&exp[i]!= ', ')
temp[t++]=exp[i];
else
{
temp[t]= '\0 ';
t=0;
str1[k++]=temp;
}
int s=0;
for(int j=0;j <k;j++)
{
if(strcmp(str1[j], "name ")==0)
{
continue;
}
if(strcmp(str1[j], "age ")!=0)
{
str2[s++]=str1[j];
}
if(strcmp(str1[j], "age ")==0)
{
for(p=j+1;p <k;p++)
{
if(strcmp(str1[j], "name "==0)
{
cout < < "error input! ";
j=p;break;
}
}
if(strcmp(str1[j], "age ")!=0)
{
str2[s++]=str1[j];
}
}
return str2;
}

[解决办法]
算法的意思是把每个单词分离出来
再查看 "name " "age "后面的东西
上面有点问题改下
if(strcmp(str1[j], "age ")!=0&&isdigit(str[j][0]))
str2[s++]=str1[j];
}
}
}

热点排行