C#控制台实现数字型回文字符串判断
编制控制台程序实现功能:对于从键盘上输入的一个字符串数据,判断该字符串是否为回文字字符串。(如:123321正读反读都相同的字符串)
分析:
对于数组的赋初值,一般为:在定义时开辟好存储空间和存储容量(数组长度),以for循环以及parse方法将指定个数的字符串转换为指定类型并存于数组空间中。这种做法较简单快捷,但是若每次输入的数据长度不同,则都需要来回改变数组长度。
因此,现定义一个求数组长度的方法length,【对每个数组元素都只在0~9而言】,从输入的一串字符串中获取数组长度L。
功能实现分析
- 讲原数组A进行clone命令,赋值到一个新数组B,并对新数组进行颠倒(Array.Reverse(操作的数组名));
- 对两个数组的元素从第一项开始比较,不相同则直接退出;
- 若每一项都相同则为回文字符串。
代码模块
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace norm_program
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入一组数字:");
int i = int.Parse(Console.ReadLine());
int j = 1, x = 1;//j为数组长度计数;
int L = length(i, j, x);
int[] num = new int[L];//完成自行判断数组长度;
Console.WriteLine("数组的长度为{0}。\n", L);
for (int m = 0; m < L; m++)
{
int k = i / (int)(Math.Pow(10, L - 1 - m));
num[m] = k;
i = i - k * (int)(Math.Pow(10, L - 1 - m));
}//依据计算出来的数组长度,用简单的除法对数组逐一赋值;
int[] Num;
Num = (int[])num.Clone();
Array.Reverse(Num);
for (int m = 0; m < L; m++)
{
if (Num[m] != num[m])
{
Console.Write("该数不是回文数字!");
break;
}
else if (Num[m] == num[m]&&m==L-1)
Console.Write("该数为回文数字。");
}
Console.ReadLine();
}
static int length(int i,int j,int x)//定义一个判断输入数字字符串长度的方法;
{
if (i < x||i==x )
return j-1;//我也不知道为啥要减一,因为每次输入任意一组数据后都被多计算一个长度;
else
return length(i,++j,x= x * 10);//形参值要改变,否则会提示无限循环错误;
}
}
}
结果展示