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

时间:2019-04-09 17:20:23

标签: c string

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

有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标志,则如果先前的输出为空行,则基本上不会打印任何内容,并确保它也与其他标志一起工作,换句话说,请确保它可以打印编号的行,但不能打印相邻的空行,我该如何实现?

1 个答案:

答案 0 :(得分:1)

  

有3个标志:bflag,nflag和sflag。如果bflag为1,则nflag为   隐瞒但是我们可以同时拥有b和s(或n和s),并且   两者都以自己的方式操纵输出线。我该如何处理   而不在if语句中嵌套所有可能性(我唯一的方法   可以想到)?

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

  1. 在必要时压缩空白行(标志)。如果该行为空白,则前一行也为空白,并且s标志有效,然后跳过此行。否则,
  2. 如果需要,打印行号(标志n,b)
    • 如果n标志有效而b无效,则打印行号,否则
    • 如果b标志有效并且该行不是空白,则打印行号。
  3. 打印行本身

我认为我什至没有将其分解为单独的功能,但是如果您这样做,我建议选择完全适合该方案的功能。