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

时间:2015-04-11 07:21:57

标签: c unix

我目前有一段代码将1输入与变量进行比较...... 例如,当我输入" GET"它将它与我设置的字符串进行比较,然后打开一个文件。但是如果我想在输入中比较多个字符串呢?例如,如果有人输入" GET ./homepage.html"

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

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

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

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");
}





}

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

1 个答案:

答案 0 :(得分:0)

有几种方法可以解决这个问题。最直接的方法是将您的全部输入内容读入temp,然后将temp分成带有strtok之类的标记。输入行将包括您的命令(例如GET)以及您需要采取的任何其他值。然后,如果您收到足够的输入(即GETfilename),您就可以做出决定,然后按照您的意愿做出回应。

下面是一个简短的示例,它创建一个char数组(字符串)数组,以保存作为temp输入的标记。开头的几个定义将每个令牌限制为64个字符,将最大令牌数限制为5(根据需要调整)然后将temp分成令牌并检查用户是否输入超过1个字。然后它会响应GET并显示其收集的filename。 (你可以采取你需要的任何行动)。它还会检查输入的令牌数量,以确保您不会尝试在数组末尾之外写入。

如果您有任何疑问,请查看并告知我们:

#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'.