若一个字符串在中间分开后,左边与右边的反转是相同,那就是对称文字。
请写一个简单的程序函数,回传输入的字符串是否对称。
例:abcdedcba就是对称文字
这种问题用数组应该是比较容易的,我只是写了一个可以实现的例子,我并没有考虑时间和空间的复杂度问题,你们可以作参考,其实这用动态数组是比较好的,这样比较节省空间,你们可以自己改一下,
int main()
{
char a[100];
int i=0, j, k;
char ch;
ch = getchar();
while (ch != '\n')
{
a[i] = ch;
i++;
ch = getchar();
}
j = i/2 -1;
k = i/2 +1;
while (k != i)
{
if (a[j] != a[k])
{
printf("不是回文!\n");
return 0;
}
else
{
j--;
k++;
}
}
printf("是回文! \n");
return 0;
}
//在此,我再给出一个算法,是用C++,面向对象设计的,程序有点长,对于这样一个小
//的问题也许没有必要,但是我想的是,你可以看到什么是面向对象的设计精神
//注意,我用 了MFC的库,加入了《afxwin.h>,编译时,一定要project->setting->下选择USE MFC IN A SHARED DLL
#include <iostream.h>
#include <afxwin.h>
class test
{
public:
CString str;
BOOL flag;
test();
~test();
void symmetry();
void disp();
};
test::test()
{
cout<<"input your data:"<<endl;
cin>>str.GetBuffer(200);
str.MakeUpper();
flag=TRUE;
}
test::~test()
{
}
void test::disp()
{
if (flag==TRUE)
cout<<"success"<<endl;
else
cout<<"failed!"<<endl;
}
void test::symmetry()
{
int nlen=str.GetLength()-1;
for(int i=0;i<=nlen/2;i++)
if(str.GetAt(i)!=str.GetAt(nlen-i))
{
flag=FALSE;
break;
}
}
int main()
{
test teststr;
teststr.disp();
return 0;
}
我运行了,没问题