标题:sscanf语句读取 字符串信息
只看楼主
elesun8
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-12-29
结帖率:42.86%
已结贴  问题点数:5 回复次数:4 
sscanf语句读取 字符串信息
socket收到的字符串如下:符号《》内部,不含《》

<GeocoderSearchResponse>
                <status>0</status>
                something
                <formatted_address>geocode chinese address here</formatted_address>
</GeocoderSearchResponse>


如何从这个字符串里面提取status=0   geo_addr(formatted_address)=geocode chinese address here
C程序如下:VC

char data_buff[] = "<GeocoderSearchResponse>\r\n<status>0</status>\r\nsomething<formatted_address>geocode chinese address here</formatted_address>\r\n</GeocoderSearchResponse>\r\n";

int main(void)
{
        int status = 1;
        char geo_addr[100];
        int ret;

 ret = sscanf(data_buff,"%*[^<status>]<status>%d%[</status>]</status>%*[^<formatted_address>]<formatted_address>%d%[</formatted_address>]</formatted_address>",&status,geo_addr);
//这句话应该如何写

 printf("ret from html: %d\n",ret);
 printf("status from html: %d\n",status);
 printf("geo_addr from html: %s\n",geo_addr);

 return(0);
}
搜索更多相关主题的帖子: something address status 字符串 信息 
2015-01-06 21:56
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
得分:0 
socket收到的字符串如下

这个好像是网络编程
很难的样子
不会啊
凑个热闹了

Only the Code Tells the Truth             K.I.S.S
2015-01-06 22:16
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:1 
XML的解释,.NET基础库有现成的类可用,非要用C/C++自己写,费力不讨好。不过,如果仅仅针对这么具体的某个字符串提取固定的信息,还是容易的,只是楼主的目的显然并没那么简单。

授人以渔,不授人以鱼。
2015-01-06 22:21
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
得分:4 
程序代码:
#include <stdio.h>

char data_buff[] = "<GeocoderSearchResponse>\r\n<status>0</status>\r\nsomething<formatted_address>192.168.0.1</formatted_address>\r\n</GeocoderSearchResponse>\r\n";

int main(void) {
    int status = 1;
    char geo_addr[100];
    char *fmt = "%*[^0-9]%d%*[^>]%*[>]%*[^>]%*[>]%[^&<]";
    int ret;
    ret = sscanf(data_buff, fmt, &status, geo_addr);
    printf("ret from html: %d\n", ret);
    printf("status from html: %d\n", status);
    printf("geo_addr from html: %s\n", geo_addr);
    return(0);
}


不知道这个结果是不是楼主要的?

[ 本帖最后由 longwu9t 于 2015-1-6 23:15 编辑 ]
收到的鲜花
  • elesun82015-01-08 22:16 送鲜花  2朵   附言:我很赞同

Only the Code Tells the Truth             K.I.S.S
2015-01-06 23:12
elesun8
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-12-29
得分:0 
我自己用strstr查找status format_address字符串,后再sscanf,解决了。
这样做能够比较准确的定位到指定的字符串

程序代码:
/*********************************sscanf匹配长字符串函数*******************************/
/************************************************************************************/
/************************************************************************************/
/************************************************************************************/
/************************************************************************************/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

char data_buff[] = "<GeocoderSearchResponse>\r\n\t<status>0</status>\r\n\tsomething\r\n\t<formatted_address>geocode chinese address here</formatted_address>\r\n</GeocoderSearchResponse>\r\n";
// \t代表table
int main(void) 
{ 
        int status;
        char geo_addr[100];
        int ret;
        
        char *p;

 printf("data_buff :\n%s\n",data_buff);

 system("pause"); 


 p = strstr(data_buff,"<status>");

 if(p == NULL)
    {
        printf("<status> Not Found!>");
        return (-1);
    }

 printf("p = %s\n",p);

 ret = sscanf(p,"<status>%d</status>",&status);

 printf("ret from html: %d\n",ret);

 printf("status from html: %d\n",status);

 system("pause");


 p = strstr(data_buff,"<formatted_address>");

 if(p == NULL)
    {
        printf("<formatted_address> Not Found!>");
        return (-1);
    }

 printf("p = %s\n",p);

 ret = sscanf(p,"<formatted_address>%[^<]</formatted_address>",geo_addr);

 printf("ret from html: %d\n",ret);

 printf("geo_addr from html: %s\n",geo_addr);


 return(0); 
} 
2015-01-08 22:14



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-440783-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.470181 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved