如何提取 字符串中指定范围的字符串?
"<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;
}
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
#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;
}
#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;
}