不管是java还是C#还是,数组的大小,以及获取的数据是一件非常简单的时间,但在C++里却要自己写算法,够蛋疼的
int IVR_COMMON::GetArrayLength(string message,string key)
{
string result= GetValues ( message, key) ;
char str[50240]="";
char * p;
char * split=",";
char t[10];
if (result=="" ||result.empty())
{
WriteLog("result为空,字段值为空","");
return 0;
}
strcpy(str,result.c_str());
p = strtok (str,split);
int i=0;
while(p!=NULL)
{
i++;
p = strtok(NULL,split);
}
sprintf(t, "%d", i);
WriteLog("array_value[i]大小",t);
//delete p; //清除并且释放内存
//delete split; //清除并且释放内存
return i;
}
void IVR_COMMON::GetArrayValue(string message,int size, string key,string array_value[100])
{
string result= GetValues( message, key) ;
char str[50240]="";
char str_value[100]="";
char * p;
char * split=",";
if (result=="" ||result.empty())
{
WriteLog("result为空,字段值为空","");
return ;
}
strcpy(str,result.c_str());
p = strtok (str,split);
int i=0;
while(p!=NULL)
{
//"1114", "203", "1200", "1205", "1304", "32236", "33189", "1188", "1069", "1070", "1197", "1301", "1114", "32355", "32355", "3342"
string sTempValue(p);
if (sTempValue!="" ||!sTempValue.empty())
{
if(i==0)
{
sTempValue=sTempValue.substr(1,sTempValue.size()-2);
}
if(i>0)
{
sTempValue=sTempValue.substr(2,sTempValue.size()-3);
}
strcpy(str_value,sTempValue.c_str());
array_value[i] = sTempValue;
}
else
{
array_value[i] = "";
}
p = strtok(NULL,split);
i++;
if(i>2000)
{
//为了防止出现死循环,这里默认循环500次之后自动退出,标示执行失败
return ;
}
}
char t[256];
sprintf(t, "%d", i);
WriteLog("array_value[i]大小",t); //delete []array_value; //清除并且释放内存
//delete []str_value; //清除并且释放内存
return ;
}
/从字串中根据key读取value值 wade
string IVR_COMMON::GetValues ( string message,string key)
{
char * p;
char * split="]";
char str[50240]="";
char value[3000]="";
char charkey[130]="";
int length_field=0;
string strvalue="" ;
string strEnd="]";
string field="";
string tempSplit="=";
int i=0;
strcpy(charkey,key.c_str());
try
{
message=message.substr(message.find("{"),message.size()-message.find("{"));
strcpy(str,message.c_str());
p = strtok (str,split);
WriteLog("Field",charkey);
while(p!=NULL)
{
string result(p);
int length= result.find(key);
//在截取的字串的找到了key
if(length>0&&length<50240 )
{
i++;
//如果是字串是不是首位
if(result.substr(0,1)==",")
{
length= result.find("=");
if(result.substr(2,length-2)==key)
{
strvalue= result.substr(2+key.size()+2);
strcpy(value,strvalue.c_str());
WriteLog("Get value Success!",value);
return strvalue;
}
}
//若果字串是首位
if(result.substr(0,1)=="{")
{
length= result.find("=");
if(result.substr(1,length-1)==key)
{
strvalue= result.substr(1+key.size()+2);
strcpy(value,strvalue.c_str());
WriteLog("Get value Success!",value);
return strvalue;
}
}
}
p = strtok(NULL,split);
if(i>2000)
{
//为了防止出现死循环,这里默认循环2000次之后自动退出,标示执行失败
WriteLog("Field",charkey);
WriteLog("Get value Fail!","参数解析出错!");
return strvalue="";
}
}
if(i==0)
{
WriteLog("cannot find key!",charkey);
strvalue="";
return strvalue;
}
}
catch (exception e)
{
return "";
}
return strvalue;
}