gpt4 book ai didi

c - for语句中的Strtok

转载 作者:太空宇宙 更新时间:2023-11-04 03:30:06 24 4
gpt4 key购买 nike

    char inputp1[132], inputp2[132], inputp3[132], inputp4[132], inputp5[132];

char input[MAX_NAME_SZ];
printf("-> ");
fgets (input, MAX_NAME_SZ, stdin); // user input
input[strcspn(input, "\n")] = 0;

int count=0,i,len; //counting

len = strlen(input);
for(i=0;i<=len;i++)
{
if(input[i]==' ')
count++;
}

printf("the number of words are: %d\n",count + 1);


strcpy(inputp1, strtok(input , " ,-"));
for (count = count; count < 0; count-- )
{
strcpy(inputp2, strtok(NULL, " ,-"));
}

好的,所以我有用户输入,我正在制作它,以便在每个 ,- 或空格处生成一个 token 。

我想知道的是他们有一种方法来制作一个 for 语句,这样对于一个空格后的每个字符串,它都会运行

strcpy(inputp2, strtok(NULL, " ,-"));

我还希望它每次都计数,以便它第一次运行 for 函数时它会执行

strcpy(inputp2, strtok(NULL, ",-"));

第二次

strcpy(inputp3, strtok(NULL, ",-"));

等等。

例如:我输入 10 20 30

input 和 inputp1 结果为 10

输入 p2 结果为 20

输入 p3 结果为 30

最佳答案

如果我理解您的需要,您可以使用一个静态声明的数组来保存输入以及每个单独的标记。通过 strtok 本身对字符串的修改,您可以复制第一个元素(保存原始输入字符串)中的第一个标记。例如:

#include <stdio.h>
#include <string.h>

enum { MAX_NAME = 5, MAX_NAME_SZ = 132 };

int main (void) {

size_t i, count = 0;
char *delim = " .,-\t\n";
char input[MAX_NAME][MAX_NAME_SZ] = { "" };
char *p = NULL;

if (!fgets (input[count++], MAX_NAME_SZ, stdin)) {
fprintf (stderr, "error: invalid input.\n");
return 1;
}

for (p = strtok (input[0], delim);
p && count < MAX_NAME;
p = strtok (NULL, delim), count++) {
strcpy (input[count], p);
}

for (i = 0; i < count; i++)
printf ("input[%zu] : %s\n", i, input[i]);

return 0;
}

由于 strtok 在原始字符串中的每个标记后添加了一个 nul-terminating 字符,因此 input[0] 在第一个标记后自动终止 token 。

示例使用/输出

$ ./bin/strtok_input
10 20 30
input[0] : 10
input[1] : 10
input[2] : 20
input[3] : 30

如果我不明白你试图完成什么,请告诉我,否则,如果你有任何问题,请告诉我。

关于c - for语句中的Strtok,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37494287/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com