我有一个以这种格式出现的字符串:
.word 40
我想提取整数部分。整数部分始终不同,但字符串始终以.word
开头。我有一个tokenizer函数,它可以处理除此之外的所有内容。当我将.word
(.word带空格)作为分隔符时,它返回null。
如何提取数字?
由于
答案 0 :(得分:8)
您可以使用 strtok() 以空格作为分隔符提取两个字符串。
#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);