タイトル説明
「回文文字列」とは、回文文字列である「レベル」や「正午」など、前後両方を読み取る文字列です。読み取った文字列が「回文」であるかどうかを判断するプログラムを作成してください。
入力に
は複数のテストインスタンスが含まれます。入力データの最初の行は正の整数nで、これはテストインスタンスの数を表し、その後にn個の文字列が続きます。
出力
文字列が回文の場合は「yes」を出力し、そうでない場合は「no」を出力します。
サンプル入力
4
level
abcde
noon
haha
サンプル出力
yes
no
yes
no
アイデア
入力文字列が回文であるかどうかを判別します。つまり、文字列が対称であるかどうかを確認するために、最初の文字と最後の文字、2番目の文字と最後から2番目の文字を比較できます...それらがすべて等しいかどうか、すべて等しい場合は回文を意味します。それ以外の場合は、回文ではありません。
ここでは、2つの関数を記述しました。1つは数値が回文であるかどうかを判別するために使用され、もう1つは文字列が回文であるかどうかを判別するために使用されます。または、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;
}