题目描述
“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。请写一个程序判断读入的字符串是否是“回文”。
Input
输入包含多个测试实例,输入数据的第一行是一个正整数n,表示测试实例的个数,后面紧跟着是n个字符串。
Output
如果一个字符串是回文串,则输出"yes",否则输出"no".
Sample Input
4
level
abcde
noon
haha
Sample Output
yes
no
yes
no
思路
判断输入的字符串是否为回文串。也就是看这个字符串是否对称,我们可以比较第一个字符和最后一个字符,第二个字符和倒数第二个字符……看是否都相等,如果都相等,说明是回文串,否则则不是回文串。
在这里,我写了两个函数,一个是用来判断一个数是否为回文数,另一个是用来判断一个字符串是否为回文串。或者用strrev()函数将字符串逆置,其原型为:char *strrev(char *str);
str为要逆置的字符串。
判断一个数是否为回文数:
void Is_Number_Palindrome(int num) //判断一个数是否为回文数
{
int y = 0, s = num;
while(s > 0)
{
y = y * 10 + s % 10;
s = s / 10;
}
y == num ? printf("%d回文\n", num) : printf("%d不回文\n", num);
}
判断一个字符串是否为回文串:
void Is_String_Palindrome(char a[]) //判断一个字符串是否为回文串
{
int j, i, n;
char b[1000];
n = strlen(a);
for(i = 0, j = n - 1; i < n; i++, j--)
b[j] = a[i];
for(i = 0; i < n; i++)
if(b[i] != a[i]) break;
i == n ? printf("回文\n") : printf("不回文\n");
}
C语言代码:
#include<stdio.h>
#include<string.h>
int main()
{
int n;
char s[1024];
char t[1024];
scanf("%d%*c", &n);
while(n--)
{
gets(s);
strcpy(t, s);
strrev(s);
puts(strcmp(t, s) ? "no" : "yes");
}
return 0;
}
C++代码:
#include<bits/stdc++.h>
using namespace std;
char s[10005];
void Is_String_Palindrome(char a[])
{
int j, i, n;
char b[1005];
n = strlen(a);
for(i = 0, j = n - 1; i < n; i++, j--)
b[j] = a[i];
for(i = 0; i < n; i++)
if(b[i] != a[i]) break;
i == n ? printf("yes\n") : printf("no\n");
}
int main()
{
int n;
while(cin >> n)
{
for(int i = 0; i < n; i++)
{
cin >> s;
Is_String_Palindrome(s);
}
}
return 0;
}