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