在接受采访时我问到了这个问题,我的解决方案有点吸引人,所以我想知道是否有人可以做得更好。解析URL字符串以删除不需要的东西(C++)
鉴于这种形式的URL字符串:
http://www.foo.com?key1=value1&key2=value2&key3=value3,并给予重点
我想创建一个函数,它接受一个键值,并返回原始字符串没有密钥和值。
例子:
输入:
http://www.foo.com?key1=value1&key2=value2&key3=value3
remove: key2 and its value
输出:
http://www.foo.com?key1=value1&key3=value3
我的解决办法是这样的:
void parseURL(string str, string key)
{
int i;
i = str.find_first_of("?");
string s = str.substr(i);
int start = s.find(key);
int end = 0;
if (start !=string::npos)
end = s.find_first_of("&", start);
string news = str.substr(0, i) + s.substr(0, start-1) + s.substr(end);
cout << news;
}
但它的丑陋,这将失败一对 的测试用例。我知道有人有更聪明的方式来做到这一点。任何人?
使用正则表达式是我的第一种方法,无论是在真实代码还是在面试中。如果这在某种程度上是不可接受的,我会按照泰勒的建议来处理这个字符串。 – 2010-09-15 22:11:51