我正在编写一个程序来检查一个单词是否是回文。程序本身有效 但是当我输入这段特定的文字时,太糟糕了 - 我躲了起来"它不会捡起来 并忽略空格和连字符。
我看了之前的问题,但我找不到答案。
我的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();
答案 0 :(得分:1)
您的代码包含两个错误:
@"(\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('-','');
答案 1 :(得分:1)
您正在将Regex.Replace
来电的结果分配给string r
,而您永远不会引用它。这就是你的比较失败的原因。
为了更清楚地说明这一点:您正在删除空格并将该产品引用为string r
,但您只是针对string s
进行撤消和测试。
你有:
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()
扩展名。