2014-10-19 77 views
0

我正在編寫一個程序來檢查一個單詞是否是迴文。該程序本身的作品 ,但是當我輸入這個特定的文本行「太糟糕了 - 我隱藏了一個引導」它不會撿起它 並忽略空格和連字符。忽略迴文中的空白

我看了以前的問題,但我無法找到答案。我的Regex.Replace不正確?

string s, revs = ""; 
     Console.WriteLine("Please Enter Word"); 
     s = Console.ReadLine(); 
     string r = Regex.Replace(s , @"[^-\s]", ""); 

     for (int i = s.Length-1; i >= 0; i--) 
     { 
      revs += s[i].ToString(); 
     } 

     if (revs == s) 
     { 
      Console.WriteLine("Entered string is palindrome \n String was {0} and reverse string was {1}", s, revs); 
     } 
     else 
     { 
      Console.WriteLine("String entered was not palindrome."); 
     } 
     Console.ReadKey(); 
+1

你試過調試嗎?應用「替換」後的結果是什麼? – 2014-10-19 16:03:53

+0

它只是將文本的那一行視爲非迴文。似乎沒有區別。 – 2014-10-19 16:05:10

+0

我正在談論for循環之前的斷點結果。 – 2014-10-19 16:06:03

回答

1

您的代碼包含兩個錯誤:

  • 這是正確的正則表達式條件@"(\s|-)"你代替一切,但要刪除
  • 作爲jeffdot指出,要替換(不正確的字符),但是對原來的字符串

測試這個考慮,正確的代碼應該是:

string s, revs = ""; 
     Console.WriteLine("Please Enter Word"); 
     s = Console.ReadLine(); 
     string r = Regex.Replace(s , @"(\s|-)", ""); 

     for (int i = r.Length-1; i >= 0; i--) 
     { 
      revs += r[i].ToString(); 
     } 

     if (revs == r) 
     { 
      Console.WriteLine("Entered string is palindrome \n String was {0} and reverse string was {1}", s, revs); 
     } 
     else 
     { 
      Console.WriteLine("String entered was not palindrome."); 
     } 
     Console.ReadKey(); 

除了第一個WriteLine你應該決定打印什麼(因爲revs不包含空格和連字符)。

或者,如果你想只用String.Replace,你可以用兩次使用它:

s=s.Replace(' ',''); 
s=s.Replace('-',''); 
+0

謝謝你們的幫助。我現在看到我出錯的地方,看看我應該如何引用r。 – 2014-10-19 16:21:48

1

您正在分配是Regex.Replace呼叫string r的結果,你永遠不會引用它。這就是爲什麼你的比較失敗。

爲了更清楚地說明:您將刪除空格並將該產品稱爲string r,但您只能對string s進行反轉和測試。

Saverio還指出你的正則表達式不起作用(我沒有自己測試)。

您有:

string r = Regex.Replace(s , @"[^-\s]", ""); 

    for (int i = s.Length-1; i >= 0; i--) 
    { 
     revs += s[i].ToString(); 
    } 

就在那裏,你應該迭代和扭轉r代替s - 因爲s仍然有它的所有空白。

此外,正如Saverio所說,爲什麼不只是更換?

我還沒有試過編譯,但只要你沒有使用應該工作的.NET框架的非常舊的版本。它可能需要您using System.Linq才能使用Reverse()擴展名。

+0

是的,我明白你的意思,但我將如何引用字符串r? – 2014-10-19 16:15:15

+1

雖然jeff是正確的,你沒有引用修改過的字符串,你的正則表達式也是錯誤的,正如我在我的答案中指出的那樣。 – 2014-10-19 16:16:12

+0

你看到在將空白替換爲字符串r之後,你在索引字符串s嗎?我會在答案中添加一些示例,但這應該比較清楚。 – clarkitect 2014-10-19 16:16:25