繁体   English   中英

如何合并在字符串中在命令行中传递的选项的效果?

[英]How can i combine the effects of options passed in the command line on strings?

我有一个接收一些标志的函数,并根据这些标志格式化要打印为输出的行。 问题是,这些标志彼此独立。 换句话说,输出的格式可以与这些标志的组合一样多。

共有3个标志:bflag,nflag和sflag。 如果bflag为1,则nflag被忽略。 但是我们可以同时拥有b和s(或n和s),并且它们都以自己的方式操纵输出线。 如何在不将所有可能性嵌套在if语句中的情况下进行处理(这是我能想到的唯一方法)?

这是接收未格式化的字符串和标志的函数:

void outputLine(int *index, char buffer[], int bflag, int nflag){ //processes the options passed in the command line to create the output
  if (nflag){
    indexedLineout(index, buffer);
  }
  else if (bflag){
    bprint(index, buffer);
  }
  else{//no options
    printf("%s", buffer);
  }
}

这是indexedLineout():

void indexedLineout(int *index, char buffer[]){//adds an index to the beginning of the line
  printf ("%*d\t%s", 6, *index, buffer);
  (*index)++;//increment the index
}

我认为显示bprint()并不重要,因为它对indexedLineOut()具有非常类似的行为。

如果我要添加上面提到的s标志,则如果先前的输出为空行,则基本上不会打印任何内容,并确保它也可以与其他标志一起使用,换句话说,请确保它可以打印编号的行,但不相邻的空行,我如何实现?

共有3个标志:bflag,nflag和sflag。 如果bflag为1,则nflag被忽略。 但是我们可以同时拥有b和s(或n和s),并且它们都以自己的方式操纵输出线。 如何在不将所有可能性嵌套在if语句中的情况下进行处理(这是我能想到的唯一方法)?

您具有由三个选项控制的两个单独的格式化功能,以一种应该相对干净的特定方式来处理。 您应该能够简单地遍历各行,对于每一行:

  1. 适当压缩空白行(标志) 如果该行为空,则前一行也为空,并且s标志有效,然后跳过此行。 除此以外,
  2. 如果合适,打印行号(标志n,b)
    • 如果n标志有效而b无效,则打印行号,否则
    • 如果b标志有效并且该行不为空,则打印行号。
  3. 打印行本身

我认为我什至不会将其拆分为单独的函数,但是如果您这样做,我建议选择完全适合该方案的函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM