期待把字符串按照 & 和 =分割成 map[name] = value这种形式,但是分割错误。result=OkExisted&mac=00:0c:29:7a:e1:5a&time=1709494437应该分割成:result=OkExisted mac=00:0c:29:7a:e1:5a time=1709494437; 错误的结果是其中mac:mac=00:0c:29:7a:e1:5a&time=1709494437
代码:
#include<iostream>
#include<map>
using namespace std;
int get_web_paras(std::string param_list, std::map<std::string, std::string>& m_name_value)
{
std::string pure_para;
std::string name, valu;
std::string one_para;
size_t start;
size_t equa_loca;
if(param_list.find("=") == std::string::npos)
{
return 1;
}
size_t loca = param_list.find("?");
if(loca != std::string::npos)
{
pure_para = param_list.substr(loca + 1);
}else {
pure_para = param_list;
}
loca = pure_para.find('&');
start = 0;
while(loca != std::string::npos)
{
//result=OkExisted&mac=00:0c:29:7a:e1:5a&time=1709494437
one_para = pure_para.substr(start, loca);
printf("\n%s:%d start=%lu,loca=%lu onePara=%s \n",__func__, __LINE__, start, loca, one_para.c_str());
equa_loca = one_para.find("=");
if(equa_loca != std::string::npos)
{
name = one_para.substr(0, equa_loca);
valu = one_para.substr(equa_loca + 1);
printf("\n%s:%d map[%s]=%s\n",__func__, __LINE__, name.c_str(), valu.c_str());
m_name_value[name] = valu;
}
start = loca + 1;
loca = pure_para.find("&", start);
one_para.clear();
}
one_para = pure_para.substr(start);
printf("\n%s:%d start=%lu,loca=%lu onePara=%s \n",__func__, __LINE__, start, loca, one_para.c_str());
equa_loca = one_para.find("=");
if(equa_loca != std::string::npos)
{
name = one_para.substr(0, equa_loca);
valu = one_para.substr(equa_loca + 1);
printf("\n%s:%d map[%s]=%s\n",__func__, __LINE__, name.c_str(), valu.c_str());
m_name_value[name] = valu;
}
return 0;
}
int main(int argc, char *argv[])
{
std::string paras = "result=OkExisted&mac=00:0c:29:7a:e1:5a&time=1709494437";
//std::string paras = "mac=00:0c:29:7a:e1:5a&time=1709494437";
std::map<std::string, std::string> ret_paras;
get_web_paras(paras, ret_paras);
for(auto it : ret_paras)
{
printf("\nret_para[%s] = %s\n", it.first.c_str(), it.second.c_str());
}
}
运行结果,
get_web_paras:37 start=0,loca=16 onePara=result=OkExisted
get_web_paras:43 map[result]=OkExisted
get_web_paras:37 start=17,loca=38 onePara=mac=00:0c:29:7a:e1:5a&time=1709494437
get_web_paras:43 map[mac]=00:0c:29:7a:e1:5a&time=1709494437
get_web_paras:52 start=39,loca=18446744073709551615 onePara=time=1709494437
get_web_paras:58 map[time]=1709494437
ret_para[mac] = 00:0c:29:7a:e1:5a&time=1709494437
ret_para[result] = OkExisted
ret_para[time] = 1709494437