如何从字符串中复制 2 int?
How can I copy 2 int from a string?
字符串是这样的形式:
123 456\n
我的基本思路是通过for循环找到空白:
int i=0;
for (i=0;isdigit(str[i]);i++){
}
char *dest1;
strncpy(dest1, str, i-1);
dest1[i]='[=11=]';
对于第二个整数,我又做了一次:
int j=i+1;
for (;isdigit(str[j]);j++){
}
char *dest2;
strncpy(dest2; (str+j); j-i);
dest2[j-i+1]='[=12=]';
int from = atoi(dest1);
int to = atoi(dest2);
但是我第二次这样做,Xcode说'too few arguments provided to function-like macro invocation' && 'expression result unused'。
但它们的语法完全相同...谁能告诉我哪里做错了?
不需要那个,使用sscanf()
int value;
int count;
char *pointer;
char str[] = "123 456";
pointer = str;
while (sscanf(pointer, "%d%n", &value, &count) == 1)
{
fprintf(stdout, "%d\n", value);
pointer += count;
}
如果您的字符串只有整数,您可以使用 strtok()
函数,其中 returns 个标记由定界符分隔。所以你可以为分隔符添加白色 space.
例如:
#include <string.h>
char str[] = "123 456 789";
char *token;
int number;
token = strtok(str, " ");
for(int i=0; i < 2; i++){
number = atoi(token);
printf("%d\n", number);
token = strtok(NULL, " ");
}
这将为您打印:
123
456
789
请注意 strtok()
仅在第一次调用时获取字符串。然后你必须使用 NULL 直到特定字符串的末尾 - 因为你计算(猜测,知道)有多少条目或者因为 strtok()
返回了一个 NULL 指针。
你的方式(固定)
char *str = "123 456\n";
int i=0;
for (i=0; isdigit(str[i]); i++){
}
char dest1[4];
strncpy(dest1, str, i);
dest1[i]='[=10=]';
int j=i+1;
for (;isdigit(str[j]);j++){
}
char dest2[4];
strncpy(dest2, str+i+1, j-i-1);
dest2[j-i-1]='[=10=]';
int from = atoi(dest1);
int to = atoi(dest2);
我的方式
int from, to;
char *str = "123 456\n";
int ret = sscanf(str, "%d %d", &from, &to);
字符串是这样的形式:
123 456\n
我的基本思路是通过for循环找到空白:
int i=0;
for (i=0;isdigit(str[i]);i++){
}
char *dest1;
strncpy(dest1, str, i-1);
dest1[i]='[=11=]';
对于第二个整数,我又做了一次:
int j=i+1;
for (;isdigit(str[j]);j++){
}
char *dest2;
strncpy(dest2; (str+j); j-i);
dest2[j-i+1]='[=12=]';
int from = atoi(dest1);
int to = atoi(dest2);
但是我第二次这样做,Xcode说'too few arguments provided to function-like macro invocation' && 'expression result unused'。
但它们的语法完全相同...谁能告诉我哪里做错了?
不需要那个,使用sscanf()
int value;
int count;
char *pointer;
char str[] = "123 456";
pointer = str;
while (sscanf(pointer, "%d%n", &value, &count) == 1)
{
fprintf(stdout, "%d\n", value);
pointer += count;
}
如果您的字符串只有整数,您可以使用 strtok()
函数,其中 returns 个标记由定界符分隔。所以你可以为分隔符添加白色 space.
例如:
#include <string.h>
char str[] = "123 456 789";
char *token;
int number;
token = strtok(str, " ");
for(int i=0; i < 2; i++){
number = atoi(token);
printf("%d\n", number);
token = strtok(NULL, " ");
}
这将为您打印:
123
456
789
请注意 strtok()
仅在第一次调用时获取字符串。然后你必须使用 NULL 直到特定字符串的末尾 - 因为你计算(猜测,知道)有多少条目或者因为 strtok()
返回了一个 NULL 指针。
你的方式(固定)
char *str = "123 456\n";
int i=0;
for (i=0; isdigit(str[i]); i++){
}
char dest1[4];
strncpy(dest1, str, i);
dest1[i]='[=10=]';
int j=i+1;
for (;isdigit(str[j]);j++){
}
char dest2[4];
strncpy(dest2, str+i+1, j-i-1);
dest2[j-i-1]='[=10=]';
int from = atoi(dest1);
int to = atoi(dest2);
我的方式
int from, to;
char *str = "123 456\n";
int ret = sscanf(str, "%d %d", &from, &to);