2016-10-10 14 views
2

有if語句來寫這個更簡單的方法更簡單的方法?寫這一點,如果函數C++

int main() 
{ 
    char k[100]; 
    int i=0; 
    ifstream fd ("info.txt"); 
    while (!in.eof()) 
    { 
    fd >> k[i] 
    if (int(k[i]) != 96 || int(k[i]) != 97 || 
     int(k[i]) != 98 || int(k[i]) != 99) 
      i++; 
    } 
} 

,並以此類推,直到122基本上所有我想要做的是檢查是否在.txt文件的符號所有字母相匹配,@符號和一個「」(句號)

是有更簡單的方法來做到這一切?任何幫助深表感謝 !

+11

使用'isalpha'並檢查特定的符號?另外,不要使用幻數。如果你想檢查'a'使用''a''不是一些數字。 – NathanOliver

+4

也,見[爲什麼'的iostream :: condsidered錯了一個循環條件中eof'?](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-錯誤)。此外,[這個問題](http://stackoverflow.com/q/39150884/4892076)上測試一個字符是否一組字符的匹配。 – jaggedSpire

+4

這不是您的實際代碼。我懷疑你的編譯器沒有抱怨undefined'in'符號。 – StoryTeller

回答

4

試試這個:

char c; 
while (fd >> c) 
{ 
    if ((c < '`') || (c > 'c')) 
    { 
    k[i] = c; 
    ++i; 
    } 
} 

通常情況下,使用字符常量是比他們的ASCII碼值等價更具可讀性。

另外,using eof in a loop is considered wrong,所以放置在輸入操作中while表達。

由於您的值是連續的,因此可以使用<>運算符來減少比較次數。

編輯1:
另一種方法是有效的信件放入一個字符串和搜索的字符串。您可以使用islower來檢測小寫字母。

+1

字符常量通常比代碼點更具可移植性。雖然這裏不是這種情況,因爲事情是假定他們的訂貨... –

0

你可以寫你如果這樣的語句:

if (int(k[i]) < 96 || int(k[i]) > 122){ 
     i++; 
    } 
0
int countemailchars(istream & is) 
{ 
    char ch; 
    int answer = 0; 
    while(is.get(&ch)) 
    { 
     if(strchr("[email protected]", tolower(ch))) 
     answer++; 
    } 

    return answer; 
} 

ifstream fd ("info.txt"); 
int N = countemailchars(fd); 
-4
int main() 
{ 
    char k[100]; 
    int j; 
    int i = 0; 
    ifstream fd("info.txt"); 
    char ch; 
    while (!in.eof()) 
    { 
     fd >> ch; 
     j = int(ch); 
     if (j != 96 || j != 97 || j != 98 || j != 99) 
     { 
      k[i] = ch; 
      i++; 
     } 

    } 
} 
+0

我敢打賭'j'不能'96'和'97'在同一時間,條件這麼一個總是爲真。 –