簡體   English   中英

忽略回文中的空白

[英]Ignoring white space in palindrome

我正在編寫一個程序來檢查單詞是否是回文。 該程序本身可以工作,但是當我輸入這一行特定文本“太糟糕了-我隱藏了啟動程序”時,它將不會選擇並忽略空格和連字符。

我看了以前的問題,但找不到答案。

我的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();

您的代碼包含兩個錯誤:

  • 這是正確的Regex條件@"(\\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('-','');

您正在將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所說的,為什么不只是更換?

string r = s.Replace(" ", string.Empty).Reverse();

我沒有嘗試編譯它,但前提是您沒有使用應該工作的非常舊的.NET框架。 可能需要using System.Linq才能使用Reverse()擴展。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM