【问题标题】:Comparing strings using strtock with parsed input使用 strtock 将字符串与已解析的输入进行比较
【发布时间】:2022-11-13 07:40:22
【问题描述】:

我正在接受输入,然后逐字解析字符串,但我需要识别每个单词的类型,因此需要能够直接将输入中字符串的第一个单词与我的一个预定义命令进行比较。

我的问题是输入由一个命令和它的参数组成,所以我必须逐字解析 STDIN,但是当我使用 strcmp 时它不起作用,除非我删除参数或在我的 strcmp 中包含一个空格。

我的代码如下:

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

int main () {
   char input[100];
   printf("Enter your input: ");
   fgets(input, 100, stdin);
   printf("Reading input... \n");
   const char s[2] = " ";
   char *arg;
   
   /* get the first token */
   arg = strtok(input, s);
   printf("First word: %s\n", arg);
   if(strcmp(arg, "ATTACK")){
       printf("Input Match\n");
   }
   
   return(0);
}

例如,如果我输入“ATTACK 50 40”,尽管第一个单词是 ATTACK,但它不会给我输入匹配。

我尝试检查存储在我的 arg 变量中的内容,以确保 strcmp 正在比较正确的内容,并且看起来确实如此,但我意识到它可能包含命令和参数之间的空格。

我尝试在 strcmp 的“ATTACK”中添加一个空格,使其变为“ATTACK”并且它有效,但我想知道是否有一种方法可以让我拥有一个垃圾收集变量,该变量将从变量中删除空格,或者我是否可以指定如果是空格,则删除最后一个字符。

【问题讨论】:

  • strcmp 当两个字符串完全匹配时返回值 0。并且 0 在诸如 if 之类的布尔上下文中被评估为 false。所以你需要实际比较if(strcmp(arg, "ATTACK") == 0)

标签: c strcmp removing-whitespace garbage


【解决方案1】:

如果字符串相等,则 strcmp 返回 0

if(strcmp(arg, "ATTACK") == 0){

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多