C#回文判定的多种解法


回文:称正读和反读都相同的字符序列为“回文”,如“abba”、“abccba”、12321、123321是“回文”,“abcde”和“ababab”则不是“回文”。

这是c语言的解法,主要是将数组元素反序输出:

#include<stdio.h>
#include<string.h>

int main(void)
{
  char str[100];
  int i, len;
  printf("please input string");
  gets(str);
  len = strlen(str);
for (i = 0; i < len / 2; i++)
{
  if (str[i] != str[len-1-i])
  {
    break;
  }
}
if (i == len / 2)
{
  printf("%s is huiwen\n", str);
}
else
{
  printf("%s not is huiwen\n", str);
}

getchar();
}

 

下面是C#的第一种解法,将原数组逆向存放到另一数组,然后进行对比:

// --------------- 算法一:根据数组元素----------------------------
Console.WriteLine("算法1:请输入一个字符串!");
string str1 = Console.ReadLine();
StringBuilder a = new StringBuilder();//声明一个可变的字符,用于逆向存放sString里的元素
//逆向存放sString里的元素
for (int i = str1.Length - 1; i >= 0; i--)
{
  a.Append(str1[i]);//循环附加
}

if (str1.Equals(a.ToString()))//Equals用于判定两对象是否具有相同值
Console.WriteLine("是回文");
else
Console.WriteLine("不是回文");

 

这是c#的第二种算法:
// ------------------算法二:利用栈先进后出,队列先进先出的特点----------------
//abba
Console.WriteLine("算法2:请输入一个字符串!");
//调用.net里面自带的Queue,Stack,并初始化
Queue<char> queue = new Queue<char>();
Stack<char> stack = new Stack<char>();
string str2 = Console.ReadLine(); //获取输入字符
for (int i = 0; i < str2.Length; ++i) //放入栈和队列
{
  queue.Enqueue(str2[i]);
  stack.Push(str2[i]);
}

IsHuiWen(queue, stack);



//检验函数,只需要检验1/2的位置,因为只需要检测前半部分和后半部分是否相同。
static void IsHuiWen(Queue<char> queue, Stack<char> stack)
{//aabb /abbaa
//abcd
// abbba
  int i = 0, total = 0;
  bool isHuiWen = true;
//确定所要取出的字数,分奇数偶数两种情况
  if (queue.Count % 2 == 0)
  total = queue.Count / 2;
  else
  total = queue.Count / 2 + 1;
//通过循环比对出栈元素和出队元素是否相同
  while (queue.Count != 0 && stack.Count != 0)
  {
    if (queue.Dequeue() != stack.Pop()) //不相等
    {
    isHuiWen = false;
    break;
    }
    else if (i == total) //检查到一半时,跳出循环
      break;
    ++i;
  }

if (!isHuiWen)
  Console.WriteLine("这不是回文");
else
  Console.WriteLine("这是回文");
}

 

C#第三种解法:

//--------------------------算法三:-----------

Console.WriteLine("算法3:请输入一个字符串!");
string str3 = Console.ReadLine();
string s=null;
//将str3压入栈中
for (int i = 0; i < str3.Length; ++i)
{
  stack.Push(str3[i]);
}
//循环将栈元素放入s中
while (stack.Count>0)
{
  s +=stack.Pop().ToString();
}

if (str3!= s)
{
  Console.WriteLine("这不是回文");
}
else{ Console.WriteLine("这是回文");}
  Console.ReadLine();

 

posted @ 2013-04-15 19:25  幻想领域  阅读(1152)  评论(0编辑  收藏  举报