无法从 c 中的给定格式拆分输入字符串?
Not able to split input string from the given format in c?
我试图通过使用 strtok() 函数。为此,我在下面编写了程序,但它一直读到第一个逗号 , 定界符(注意:输入大小可能会有所不同。就像在给定的示例中,逗号在 4 位数字之后,但它可以在 k(5 ,6,7, etc) 基于给定测试用例的数字)。
fgets(str,80,stdin);
/* read str with comma(,)delimiter */
token = strtok(str, ",");
/* walk through other tokens */
while( token != NULL )
{
// read token string with space delimiter
token2 = strtok(token, " ");
while( token2 != NULL )
{
printf("%s \n", token2);
token2 = strtok(NULL, " ");
}
token = strtok(NULL, ",");
}
strtok
的实现使用传递给它的最后一个非 NULL 字符串。
因此,行:
token = strtok(NULL, ",");
无效。
如果你知道令牌的确切数量,你可以使用sscanf
。
/* read str with comma(,)delimiter */
token = strtok(str, ",");
/* walk through other tokens */
while( token != NULL )
{
int num1;
int num2;
int num3;
int num4;
if ( sscanf(token, "%d %d %d %d", &num1, &num2, &num3, &num4) != 4 )
{
// Problem.
}
else
{
// Use the numbers
}
token = strtok(NULL, ",");
}
strtok
不可重入——您一次只能标记一个字符串。如果您想一次同时标记多个字符串,请改用 strtok_r
。更好的是,始终优先使用 strtok_r
而不是 strtok
,因为它的能力永远不会降低:
char *inner, *outer;
fgets(str,80,stdin);
/* read str with comma(,)delimiter */
token = strtok_r(str, ",", &outer);
/* walk through other tokens */
while( token != NULL )
{
// read token string with space delimiter
token2 = strtok_r(token, " ", &inner);
while( token2 != NULL )
{
printf("%s \n", token2);
token2 = strtok_r(NULL, " ", &inner);
}
token = strtok_r(NULL, ",", &outer);
}
您可能还想调查 strsep
。
我试图通过使用 strtok() 函数。为此,我在下面编写了程序,但它一直读到第一个逗号 , 定界符(注意:输入大小可能会有所不同。就像在给定的示例中,逗号在 4 位数字之后,但它可以在 k(5 ,6,7, etc) 基于给定测试用例的数字)。
fgets(str,80,stdin);
/* read str with comma(,)delimiter */
token = strtok(str, ",");
/* walk through other tokens */
while( token != NULL )
{
// read token string with space delimiter
token2 = strtok(token, " ");
while( token2 != NULL )
{
printf("%s \n", token2);
token2 = strtok(NULL, " ");
}
token = strtok(NULL, ",");
}
strtok
的实现使用传递给它的最后一个非 NULL 字符串。
因此,行:
token = strtok(NULL, ",");
无效。
如果你知道令牌的确切数量,你可以使用sscanf
。
/* read str with comma(,)delimiter */
token = strtok(str, ",");
/* walk through other tokens */
while( token != NULL )
{
int num1;
int num2;
int num3;
int num4;
if ( sscanf(token, "%d %d %d %d", &num1, &num2, &num3, &num4) != 4 )
{
// Problem.
}
else
{
// Use the numbers
}
token = strtok(NULL, ",");
}
strtok
不可重入——您一次只能标记一个字符串。如果您想一次同时标记多个字符串,请改用 strtok_r
。更好的是,始终优先使用 strtok_r
而不是 strtok
,因为它的能力永远不会降低:
char *inner, *outer;
fgets(str,80,stdin);
/* read str with comma(,)delimiter */
token = strtok_r(str, ",", &outer);
/* walk through other tokens */
while( token != NULL )
{
// read token string with space delimiter
token2 = strtok_r(token, " ", &inner);
while( token2 != NULL )
{
printf("%s \n", token2);
token2 = strtok_r(NULL, " ", &inner);
}
token = strtok_r(NULL, ",", &outer);
}
您可能还想调查 strsep
。