【问题标题】:Extract Number from Char* Array (C-String)从 Char* 数组中提取数字(C 字符串)
【发布时间】:2011-10-25 16:40:00
【问题描述】:

我有一个以这种格式出现的字符串:

.word 40

我想提取整数部分。整数部分总是不同的,但字符串总是以.word 开头。我有一个标记器功能,它适用于除此之外的所有东西。当我将.word(带空格的.word)作为分隔符时,它返回null。

如何提取号码?

谢谢

【问题讨论】:

标签: c string parsing


【解决方案1】:

您可以使用 strtok() 来提取两个以空格为分隔符的字符串。

Online Demo:

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

    int main ()
    {
        char str[] =".Word 40";
        char * pch;
        printf ("Splitting string \"%s\" into tokens:\n",str);
        pch = strtok (str," ");
        while (pch != NULL)
        {
            printf ("%s\n",pch);
            pch = strtok (NULL, " ");
        }
        return 0;
    }

输出:

Splitting string ".Word 40" into tokens:
.Word
40

如果您希望将数字 40 作为数值而不是字符串,那么您可以进一步使用 atoi() 将其转换为数值。

【讨论】:

  • 史诗般的胜利包括在线演示!
【解决方案2】:

您可以使用sscanf 从字符串中提取格式化数据。 (它的工作原理和 scanf 一样,但从字符串而不是标准输入中读取数据)

【讨论】:

  • 一个代码示例会很好,因为它是stackoverflow。
【解决方案3】:

用

检查字符串
strncmp(".word ", (your string), 6);

如果返回 0,那么您的字符串以“.word”开头,然后您可以查看(您的字符串)+ 6 以获取数字的开头。

【讨论】:

    【解决方案4】:
    char str[] = "A=17280, B=-5120. Summa(12150) > 0";
    char *p = str;
    do
    {
    if (isdigit(*p) || *p == "-" && isdigit(*(p+1)))
    printf("%ld ", strtol(p,&p,0);
    else
    p++;
    }while(*p!= '\0');
    

    此代码在控制台中写入所有数字。

    【讨论】:

      【解决方案5】:
      int foo;
      scanf("%*s %d", &foo);
      

      星号告诉 scanf 不要存储它读取的字符串。如果您正在从文件中读取,请使用 fscanf,如果输入已经在缓冲区中,请使用 sscanf。

      【讨论】:

        【解决方案6】:

        又快又脏:

        char* string = ".word 40";
        char number[5];
        unsigned int length = strlen(string);
        strcpy(number, string + length - 2);
        

        【讨论】:

        • 这会得到字符“40”,但不是整数。
        • 他没有指定他想要一个整数。他说“我想提取整数部分”,但不是哪种格式。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多