C/C++编程学习 - 第10周 ② Palindromes _easy version

题目链接

题目描述

“回文串”是一个正读和反读都一样的字符串,比如“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;
}

猜你喜欢

转载自blog.csdn.net/qq_44826711/article/details/113097884