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();