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

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

.word 40

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

我该如何提取数字?

谢谢

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

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

在线演示:

  #include  #include  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()将其转换为数字值。

检查字符串

 strncmp(".word ", (your string), 6); 

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

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

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

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

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

快而脏:

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