我是C#的新手,我正在尝试使用简单的isPalindrome方法。基本上我的for循环永远不会进入。我尝试给它字符串“hannah”,它永远不会在for循环的主体中打印一个Console.writeline方法调用。但是for循环之前的两个WriteLine调用都为“hannah”返回true,所以它应该进入for循环并从for循环体中打印出至少一个语句。我的循环出了什么问题?
private static Boolean isPalindrome(string s)
{
int counter = 0;
if (s.Length == 1)
{
return true;
}
Console.WriteLine(s[counter]==s[(s.Length - counter - 1)]); //this returns true
Console.WriteLine((counter != (s.Length / 2))); //this returns true
for (; (counter != (s.Length / 2)) & (s[counter] == (s.Length - counter - 1)); counter++)
{
Console.WriteLine("s[counter is {0} and s.length-counter-1 is", s[counter], s[(s.Length - counter - 1)]);
//The above line never prints; why doesn't my for loop get entered?
}
if((counter == (s.Length / 2))) {
return true;
}
return false;
}
答案 0 :(得分:5)
将条件的第二部分更改为(s[counter] == s[s.Length - counter - 1])
。
否则,您将s[counter]
的数字表示与s.Length - counter - 1
进行比较,而不是该索引下的字符。
答案 1 :(得分:0)
试试这个......
public bool IsPalindrome( string s )
{
bool isPalindrome = true ;
int i = 0 ;
int j = s.Length ;
while ( j > i && isPalindrome )
{
isPalindrome = s[i++] == s[--j] ;
}
return isPalindrome ;
}
从两端开始,依次比较每个角色。假设成功。当指针收敛或比较失败时,测试结束。