读书人

求算法,提取字符串里的参数解决思路

发布时间: 2012-08-01 17:53:40 作者: rapoo

求算法,提取字符串里的参数
我想提取一个超链接字符串里的参数。
做过网站的应该很容易理解。

例:

有一个字符串
CString sUrl="http://127.0.0.1/forum.jsp?tid=123&fid=1";

实现以下方法,当sParam="tid"时返回123,当sParam="fid"时返回1
int getUrlParamValue(string sUrl,string sParam);



[解决办法]
CString和string不是一回事!

C/C++ code
#include <stdio.h>#include <string.h>#include <stdlib.h>char sU[]="http://127.0.0.1/forum.jsp?tid=123&fid=1";int getUrlParamValue(char *sUrl,char *sParam) {//不是数或找不到sParam返回0    char s[1024],*p,a[80];    int L;    p=strchr(sUrl,'?');    if (!p) return 0;    strncpy(s,p,1023);s[1023]=0;    s[0]='&';    a[0]='&';    strncpy(a+1,sParam,77);a[78]=0;    strcat(a,"=");    L=strlen(a);    p=strstr(s,a);    if (!p) return 0;    return atoi(p+L);}int main() {    printf("%d,%d,%d\n",getUrlParamValue(sU,"tid"),getUrlParamValue(sU,"fid"),getUrlParamValue(sU,"zid"));    return 0;}//123,1,0
[解决办法]
C/C++ code
#include <string>#include <map>using namespace std;typedef std::map<string, string> MAPSTR;bool GetUrlParamValue(char* vURL, MAPSTR* vParamList){    if(0 == vURL)        return false;    if(0 == vParamList)    return false;        string    tURL    = vURL;    int        tPos1    = tURL.find("?");    if(-1 == tPos1)        return true;        while(true)        {        tURL = tURL.substr(tPos1+1);                    tPos1 = tURL.find("&");        int    tPos2 = tURL.find("=");        if(-1 == tPos1)    break;        if(-1 == tPos2)    break;                    string tParam = tURL.substr(0,            tPos2);        string tValue = tURL.substr(tPos2+1,    tPos1-tPos2-1);        vParamList->insert(std::make_pair(tParam, tValue));        }        return true;} 

读书人网 >C++

热点推荐