新闻  |   论坛  |   博客  |   在线研讨会
如何提取字符串中数字
电子禅石 | 2018-05-16 12:31:44    阅读:2149   发布文章

问题:提取“485:80:63”字符串中数字。

#include "stdio.h"

int main(void)
{
    char aTxBuffer[128];
    sprintf(aTxBuffer,":%d:%d:%d\n",456,80,433);
    printf("len is %d,%s\r\n",(strlen(aTxBuffer)),aTxBuffer); 
    
    
    printf("hello\r\n");

    char *p = aTxBuffer;
    int num[100];
    int i, r, v, n;
    i = 0;
    //从字符串中读取出内容
    while (1)
    {
        r = sscanf(p, "%d:%n", &v, &n);
        if (1 == r)
        {
            num[i++] = v; //4 3 3 
            p += n;
            printf("%d,%d\r\n",v,n);
        }
        else if (0 == r)
        {
            p++;
        }
        else
        {
            break;
        }
    }
    //打印读取到的内容
    for (n = 0; n < i - 1; n++)
        printf("%d ", num[n]);
    printf("%d\n", num[i - 1]);
    sscanf(p, "%d:%n", &v, &n);
    return 0;
}

其中使用到sscanf 函数。比较好的介绍如下:

http://www.jb51.net/article/90495.htm

其中:2) n:至此已读入值(未必赋值)的等价字符数,该数目必须以int类型存储。如"10,22"经过"%d%*[^0-9]%n"格式转换后,%n对应的参数值为3(虽然','未参与赋值)。

     'n'并非转换符,尽管它可用'*'抑制。C标准声称,执行%n指令并不增加函数返回的赋值次数;但其勘误表中的描述与之矛盾。建议不要假设%n对返回值的影响。


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
属于自己的技术积累分享,成为嵌入式系统研发高手。
推荐文章
最近访客