gpt4 book ai didi

比较 C 中单个输入中的多个字符串

转载 作者:行者123 更新时间:2023-11-30 17:16:42 25 4
gpt4 key购买 nike

我目前有一段代码可以将 1 个输入与一个变量进行比较...例如,当我输入“GET”时,它会将其与我设置的字符串进行比较,然后打开一个文件。但是如果我想比较输入中的多个字符串怎么办?例如,如果有人输入“GET ./homepage.html”

所以第一个字符串 GET 表示他们想要检索一个文件,第二个字符串“./homepage.html”是他们想要查看的文件?

我对此的想法是使用 GET + 所有可能的文件组合的组合构建一个数组,然后使用 strcomp 选择正确的一个并打开指定的文件..?但我并不是 100% 知道如何链接我的输入以与整个数组进行比较?

当前代码如下,非常基本的字符串比较 -> 打开文件并将其写入标准输出。

int main(int argc, char *argv[] ) {
MainStruct val;
parse_config(&val);
char userInput[100] = "success.txt";
char temp[100];

if (checkaccess() == 0)
{
parse_config(&val);

} else {
fprintf(stderr,"unable to load config file\n");

}

printf("Connected to Domain : %s", val.domain);

fgets(temp, 6, stdin);
temp[strcspn(temp, "\n")] = '\0';
if(strcmp(temp, "GET /") == 0 )
{
openfile(userInput);

} else {
printf("that was not a very valid command you gave\n");
}





}

编辑:我还应该提到第二个字符串输入也应该==函数openfile读入的userInput。不知道如何分离这两个字符串。

最佳答案

有几种方法可以解决这个问题。最直接的方法是将整行输入读取到 temp 中,然后使用 strtok 等将 temp 分解为标记。输入行将包括您的命令(例如 GET)以及您需要执行操作的任何其他值。如果您收到足够的输入(即 GET文件名),您就可以做出决定,然后按照您的意愿进行响应。

下面是一个简短的示例,它创建一个 char 数组(字符串)数组来保存作为 temp 输入的标记。开头的几个定义将每个标记限制为 64 个字符,将标记的最大数量限制为 5(根据需要调整),然后它会破坏 temp > 进入标记并检查用户输入的单词是否超过 1 个。然后,它响应 GET 并显示它收集的文件名。 (您可以采取任何您需要的行动)。它还检查输入的标记数量,以确保您不会尝试写入超出数组末尾的内容。

看看,如果您有疑问,请告诉我:

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

#define MAXISZ 64
#define MAXIN 5

int main (void) {

char temp[MAXISZ] = {0}; /* temp variable */
char input[MAXIN][MAXISZ] = {{0}}; /* array of strings to hold input */
size_t icnt = 0; /* number of input words */
size_t tlen = 0; /* length of temp read by fgets */

printf ("\n Enter command [filename]: ");
if (fgets (temp, MAXISZ, stdin) == NULL) {
printf ("error: fgets failed.\n");
return 1;
}

/* get length and trim newline */
tlen = strlen (temp);
while (tlen > 0 && temp[tlen - 1] == '\n')
temp[--tlen] = 0;

/* if temp contains a space */
if (strchr (temp, ' '))
{
/* break tmp into tokens and copy to input[i] */
char *p = NULL;
for (p = strtok (temp, " "); p != NULL; p = strtok (NULL, " "))
{
strcpy (input[icnt++], p);

/* check if MAXIN reached */
if (icnt == MAXIN)
{
printf ("error: MAXIN token exceeded.\n");
break;
}
}

/* if more than 1 word input, use 1st as command, next as filename */
if (icnt > 0)
{
if (strcmp (input[0], "GET") == 0)
printf ("\n You can open file : %s\n", input[1]);
}

}
else
printf ("\n Only a single word entered as command '%s'.\n", temp);

printf ("\n");

return 0;
}

输出

$ ./bin/fgets_split

Enter command [filename]: GET /path/to/myfile.txt

You can open file : /path/to/myfile.txt

$ ./bin/fgets_split

Enter command [filename]: GET

Only a single word entered as command 'GET'.

关于比较 C 中单个输入中的多个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29575241/

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