2014-10-27 28 views
0

我解析一个文本文件。在解析时,我想跳过某些字符(空格,换行符,逗号,句点)。在PHP中,可以用in_array(char, array)检查数组中是否存在变量,但考虑到我们正在使用指针,事情明显不同。多字符比较,我怎样才能更智能地编写它?

我目前正在写像这样(原谅怪异格式)

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

    continue; 
} 

但感觉有点哑。是否有更智能/更紧凑的方式来执行这种多重比较?

+1

很难猜测关于它的“愚蠢”。也许你应该写一个单行的isPunctuation(char)函数。也许你不应该[太努力](http://stackoverflow.com/questions/26124620/why-does-msvc-emit-a-useless-movsx-before-performing-this-bit-test)。 – 2014-10-27 17:53:18

回答

2

另一个选择是使用strchr检查一个给定的字符是一个给定的字符串:

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

这正是我所期待的。谢谢! – krystah 2014-10-27 18:05:46

+0

注意:'c'会匹配4个所需的'char':''''''\ n'','''''','',''和''\ 0''。 – chux 2014-10-27 18:16:08

+1

@krystah如果时间紧迫,您的解决方案可能仍比strchr解决方案更好。 – 2014-10-27 18:19:34

1

使用功能,并传递一个字符串与你的角色:

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

     str++ ; 
    } 

return false ; 
} 

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

试试这个:

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