从Char *数组中提取数字(C-String)

时间:2011-10-25 16:40:01

标签: c string parsing

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

.word 40

我想提取整数部分。整数部分始终不同,但字符串始终以.word开头。我有一个tokenizer函数,它可以处理除此之外的所有内容。当我将.word(.word带空格)作为分隔符时,它返回null。

如何提取数字?

由于

6 个答案:

答案 0 :(得分:8)

您可以使用 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() 将其转换为数字值。

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

如果这返回0,那么你的字符串以“.word”开头,然后你可以看(你的字符串)+ 6来到数字的开头。

答案 3 :(得分:1)

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');

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

答案 4 :(得分:0)

int foo;
scanf("%*s %d", &foo);

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

答案 5 :(得分:0)

又快又脏:

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