c - 在处理命令行参数时如何在 C 中考虑空格

标签 c

我正在尝试处理命令行参数,但命令行参数包含我需要考虑的空格。

这是我的代码,我正在尝试处理以下命令行参数:

  • 如果我输入“-upper”作为命令参数,则会将文本更改为大写/
  • 如果我输入“-lower”,则会将文本更改为小写/
  • 如果我输入“-upper -lower”,那么它只会将文本更改为小写/
  • 如果我输入“-lower -upper”,那么它只会将文本更改为大写/

我的程序片段是:

int main(int argc, char *argv[])
{

  int ch;
  int arg;
  char buf[100];
  int upper = 0;
  int lower = 0;

  for( arg = 1; arg < argc; arg++ )
  {
      if( strcmp( argv[arg] , "-upper") == 0 )
      {
        upper = 1;
      }
      if( strcmp( argv[arg] , "-lower") == 0)
      {
        lower = 1;
      }
       if( strcmp( argv[arg] , "-lower -upper") == 0 )
      {
        upper = 1;
      }
      else if( strcmp( argv[arg] , "-upper -lower") == 0)     
      {
        lower = 1;
      }

      else
      {
        fprintf(stderr,"Invalid command line option\n" );
    return 0;
      }
  }

  while ((ch = getchar()) != EOF) //deal with cmd args

但是,strcmp 不处理空格。所以出现的问题是C程序不会将“-lower -upper”视为“大写”。如何比较包含空格的 cmd 参数,以便它将处理“-lower -upper”与“-upper”相同?

感谢您的帮助!

最佳答案

当设置了 upper 或相反时,您可以简单地清除 lower,即。最后一个参数会清除旧的参数:

int upper = 0;
int lower = 0;

for( arg = 1; arg < argc; arg++ )
{
    printf("parsing %s\n", argv[arg]);
    if( strcmp( argv[arg] , "-upper") == 0 )
    {
        printf("Now in upper mode\n");
        lower = 0;
        upper = 1;
        continue;
    }
    if( strcmp( argv[arg] , "-lower") == 0)
    {
        printf("Now in lower mode\n");
        upper = 0;
        lower = 1;
        continue;
    }

    fprintf(stderr,"Invalid command line option\n" );
    return 0;
}

关于c - 在处理命令行参数时如何在 C 中考虑空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38322198/

相关文章:

c - 从 C 语言的双向链表中删除重复项

ios - 如何从 iOS 系统字体的 CGFontRef 创建 FT_Face?

c# - 我们可以用 c 形式写那个函数吗

c - main() 函数的返回类型

java - 通过 JNA 将 InputStream 作为文件指针传递给 C 代码

c++ - "standard output stream"和 "standard output device"有什么区别?

c - 如何编写类似 foreach 的宏来访问图形的所有节点

c - 为什么递增数组名称时没有 'l-value required' 错误

顺序更改时 c 结构成员意外更改

c++ - 将 IP 地址分成八位字节,但使用 sscanf 跳过第一个八位字节