2014-10-27 47 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; 
}