2013-07-29 36 views
2

因爲我的教授不會讓我使用RegEx,所以我堅持使用循環來檢查字符串上的每個字符。 有沒有人有示例代碼/算法?如何使用循環檢查字符串中的特殊字符

public void setAddress(string strAddress) 
{ 
    do 
    { 
     foreach (char c in Name) 
     { 
      if (/*check for characters*/ == false) 
      { 
       Address = strAddress; 
      } 
     } 
     if (/*check for characters*/ == true) 
     { 
      Console.Write("Invalid!"); 
     } 
    } while (/*check for characters*/ == true) 
} 
public int getAddress() 
{ 
    return Address; 
} 

我只需要包含字母和數字。不允許使用!@#$%^ &等字符。 我不被允許使用RegEx,因爲他還沒有向我們傳授這個信息......當他教這些循環和字符檢查的那一天,我無法上課,所以現在他不會再告訴我更多。無論如何,如果沒有使用正則表達式更有效的方式,那會很有幫助。

+3

你是什麼意思「特殊字符」? –

+0

你可以顯示你正在檢查什麼無效字符..我也沒有看到需要做一個while循環與foreach循環結合..你可以做一個foreaach或for循環一樣簡單或使用一個linq語句 – MethodMan

+0

'因爲我的教授不會讓我使用RegEx' - 你應該告訴他,作爲一名程序員,你可以用最有效的方式解決問題。 –

回答

5
 string s = @"$KUH% I*$)OFNlkfn$"; 
     var withoutSpecial = new string(s.Where(c => Char.IsLetterOrDigit(c) 
              || Char.IsWhiteSpace(c)).ToArray()); 

     if (s != withoutSpecial) 
     { 
      Console.WriteLine("String contains special chars"); 
     } 

您可以在所有:)

來源做沒有循環:https://stackoverflow.com/a/4503614/1714342

編輯:

if(s.Any(c=>c => !Char.IsLetterOrDigit(c) || !Char.IsWhiteSpace(c)) 
{ 
    Console.WriteLine("String contains special chars"); 
} 
+0

也值得注意,當然會有循環 - 只是隱藏在linq部分內部。仍然,一個非常整潔的解決方案! –

+1

@ Chips_100當然在linq中有下面的循環,但你並不是自己編寫它們。循環無處不在:D – wudzik

+1

附註:[任意](http://msdn.microsoft.com/en-us/library/bb534972.aspx)對於給定的任務更好...兩種方法都不太可能幫助OP,所以:) - 但是對於SO很好的答案。 –

0

與顯式循環一個解決辦法是

String s = @"$KUH% I*$)OFNlkfn$"; 

    foreach (Char c in s) 
    if (!(Char.IsLetterOrDigit(c) || Char.IsWhiteSpace(c))) { 
     Console.WriteLine("String contains special chars"); 

     break; 
    } 
+0

我可能可以編輯一些代碼,如果我使用這個,謝謝:) – Tam

0
bool check_for_characters(char c) 
{ 
return (c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'); 
} 
相關問題