C / C ++プログラミング学習-10週目②回文_easyバージョン

トピックリンク

タイトル説明

「回文文字列」とは、回文文字列である「レベル」や「正午」など、前後両方を読み取る文字列です。読み取った文字列が「回文」であるかどうかを判断するプログラムを作成してください。

入力に
は複数のテストインスタンスが含まれます。入力データの最初の行は正の整数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;
}

おすすめ

転載: blog.csdn.net/qq_44826711/article/details/113097884