2014-10-19 82 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