首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

怎么提取 字符串中指定范围的字符串

2013-07-09 
如何提取 字符串中指定范围的字符串?123wadadwadawdawd/123123 /123提取这之间里面的内容, 两边

如何提取 字符串中指定范围的字符串?
"<123>wadadwadawdawd</123>"

<123> </123>

提取这之间里面的内容, 两边的123 是固定的
[解决办法]
xml解析了.
[解决办法]
这是典型的xml风格。可以使用tinyxml等库做解析。
[解决办法]

#include<stdio.h>
#include<string.h>

int main()
{
char c1[26]={"<123>wadadwadawdawd</123>"};
char c2[26];
int i1=0,i2=0,k;
k=strlen(c1);

while(1)
{
if(c1[i1]>='a'&&c1[i1]<='z')
{
c2[i2]=c1[i1];
++i2;
}
else
;
++i1;
if(i1==k)
break;

}

for(i1=0;i1<i2;i1++)
{
printf("%c",c2[i1]);
}
printf("\n");
return 0;
}

[解决办法]
檫,LZ咋不说清楚呀。我还以为是新手题,献丑了~~~
[解决办法]
char pcSource[]="sdfsdfsdfsd<123>wadadwadawdawd</123>sdfwertwerdsdcsfawfdawdfc"
char *pcdes;
char *pcTmp;
int i;
int iLen;

pcTmp=strstr(pcSource, "<123>"+strlen("<123>"));

iLen=strstr(pcTmp, "</123>")-pcTmp;

pcDes=new char[iLen+10];
memset(pcDes, 0, iLen=10);
memcpy(pcDes, pcTmp, iLen);




[解决办法]
以上代码只保证正确性,不保证效率。。。。
[解决办法]
char s[]="<123>wadadwadawdawd</123>";
char t[80];
sscanf(s,"<123>%79[^<]</123>",t);
printf("[%t]\n",t);//[wadadwadawdawd]

[解决办法]

#include<stdio.h>
int main()
{
char s[]="<123>wadadwadawdawd</123>";
char t[80];
sscanf(s,"<123>%79[^<]</123>",t);
printf("[%s]\n",t);//[wadadwadawdawd]   //%t改成%s
return 0;
}

[解决办法]

#include<stdio.h>
#include<string.h>
int main()
{
char s[]="<123>wadadwadawdawd</123>";//如果是"sdfsdfsfsdf<123>wadadwadawdawd</123>",这一段程序就不行了
char t[80];
sscanf(s,"<123>%79[^<]</123>",t);
printf("[%s]\n",t);//[wadadwadawdawd]

//可以是任意的。我的程序,手误比较多,达不到赵老师的水改,在编译器中改了一下。。。。
char pcSource[]="sdfsdfsdfsd<123>wadadwadawdawd</123>sdfwertwerdsdcsfawfdawdfc";
char *pcDes;
char *pcTmp;
int iLen;

pcTmp=strstr(pcSource, "<123>")+strlen("<123>");

iLen=strstr(pcTmp, "</123>")-pcTmp;

pcDes=new char[iLen+10];
memset(pcDes, 0, iLen+10);
memcpy(pcDes, pcTmp, iLen);



puts(pcDes);
return 0;
}


[解决办法]
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
const char * lpszBt = "<beatheart><probe_type>1</probe_type><probe_id>0800276D3191</probe_id><probe_ip>192.168.16.240</probe_ip><cpu>2</cpu><mem>81</mem><hd>32</hd><netcard><device>eth0</device><status>0</status><usage>0</usage><drop>0</drop></netcard><time>2013-4-23 16:21:23</time></beatheart>";
char tszBuffer[1024];
char tszMatch[128];
char mk1[83],mk2[84];
int getmark(char *src,char *mark) {
    char *p,*q;
    int L;

    sprintf(mk1,"<%.80s>",mark);
    sprintf(mk2,"</%.80s>",mark);
    p=strstr(tszBuffer,mk1);
    if (!p) return 1;
    q=strstr(p,mk2);
    if (!q) return 2;
    L=strlen(mk1);
    strncpy(tszMatch,p+L,__min(q-p-L,127));tszMatch[__min(q-p-L,127)]=0;
    return 0;
}
int main() {
    strncpy(tszBuffer,lpszBt,1023);tszBuffer[1023]=0;
    if (getmark(tszBuffer,"netcard")) return 1;
    printf("%s\nnetcard=%s\n",tszBuffer,tszMatch);
    strncpy(tszBuffer,tszMatch,1023);tszBuffer[1023]=0;
    if (getmark(tszBuffer,"device")) return 1;
    printf("%s\ndevice=%s\n",tszBuffer,tszMatch);
    if (getmark(tszBuffer,"status")) return 1;
    printf("%s\nstatus=%s\n",tszBuffer,tszMatch);
    if (getmark(tszBuffer,"usage")) return 1;
    printf("%s\nusage=%s\n",tszBuffer,tszMatch);
    if (getmark(tszBuffer,"drop")) return 1;
    printf("%s\ndrop=%s\n",tszBuffer,tszMatch);
    return 0;
}
//<beatheart><probe_type>1</probe_type><probe_id>0800276D3191</probe_id><probe_ip>192.168.16.240</probe_ip><cpu>2</cpu><me
//m>81</mem><hd>32</hd><netcard><device>eth0</device><status>0</status><usage>0</usage><drop>0</drop></netcard><time>2013-
//4-23 16:21:23</time></beatheart>
//netcard=<device>eth0</device><status>0</status><usage>0</usage><drop>0</drop>
//<device>eth0</device><status>0</status><usage>0</usage><drop>0</drop>
//device=eth0
//<device>eth0</device><status>0</status><usage>0</usage><drop>0</drop>
//status=0
//<device>eth0</device><status>0</status><usage>0</usage><drop>0</drop>
//usage=0
//<device>eth0</device><status>0</status><usage>0</usage><drop>0</drop>
//drop=0


推荐使用tinyxml
[解决办法]
#include<stdio.h>
#include<string.h>
#define start 1
#define end 0




int main()
{
char c1[]={"<123>wadadwadawdawd</123>"};
char c2[256];
int i=0,change,q=0,k;

while(c1[i]!=EOF)
{
if('<'==c1[i])
{
if('/'==c1[i+1])
{
change=end;
}
}
else if('>'==c1[i-1])
{
change=start;
}

if(start==change)
{
c2[q]=c1[i];
++q;
}
else if(end==change)
{
c2[q]='\0';
break;
}
++i;
}
puts(c2);

return 0;
}



这是我利用基础知识写出来的,只能帮你到这儿了~
[解决办法]
补充楼上,目前测试了很多种 c1[]的写法,发现都可以满足LZ的要求,如果还有不满足的,麻烦告诉我一下,我这人比较喜欢刨根问底~~谢谢啦!
[解决办法]

#include <stdio.h>
#include <string.h>

int main(){
char s1[] = "<123>wadadwadawdawd</123>";
char s2[30];
char *p = strstr(s1, "</123>");
*p = 0;
strcpy(s2, strstr(s1, "<123>") + 5);
*p = '<';
puts(s2);
return 0;
}

[解决办法]
google DOM

热点排行
Bad Request.