【问题标题】:Multiple character comparisons, how can I write it smarter?多字比较,怎么写更聪明?
【发布时间】:2021-07-14 05:35:24
【问题描述】:

我正在解析一个文本文件。解析时,我想跳过某些字符(空格、换行符、逗号、句点)。在 PHP 中,可以使用 in_array(char, array) 检查数组中是否存在变量,但鉴于我们使用的是指针,情况显然有所不同。

我现在是这样写的(请原谅奇怪的格式)

if (c == ' '  || 
    c == '\n' || 
    c == '.'  || 
    c == ',') {

  continue;
}

但感觉有点笨。有没有更智能/更紧凑的方法来执行这样的多重比较?

【问题讨论】:

  • 很难猜出它有什么“愚蠢”。也许你应该写一个单行 isPunctuation(char) 函数。也许你不应该try too hard

标签: c coding-style char


【解决方案1】:

使用一个函数并用你的字符传递一个字符串:

_Bool Check( char a , char* str )
{
    while( *str )
    { 
        if( *str == a )
        {
            return true ;
        }

        str++ ;
    }

return false ;
}

Check( c , ",.\n " ) ;

【讨论】:

    【解决方案2】:

    试试这个:

    switch(c) {
      case ' ':
      case '\n':
      case '.:
      case ',':
        continue;
    }
    

    【讨论】:

      【解决方案3】:

      另一种选择是使用strchr 检查给定字符是否在给定字符串中:

      if (strchr(" \n.,", c)
          continue;
      

      【讨论】:

      • 这正是我想要的。谢谢!
      • 注意:c 将匹配 4 个所需的 char' ''\n''.'',''\0'
      • @krystah 如果时间紧迫,您的解决方案可能仍然比 strchr 解决方案更好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-12
      • 2016-01-07
      • 2022-12-01
      • 2011-11-24
      • 1970-01-01
      • 2013-09-21
      相关资源
      最近更新 更多