[英]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();
您的代碼包含兩個錯誤:
@"(\\s|-)"
替換了您要刪除的所有字符 考慮到這一點,正確的代碼應為:
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.