【字符数组】判断回文串

在刚学到字符数组呢,大家可能刚接触,没有怎么理解就开始做题了,碰到这种回文串的题可能会有点懵,在做PTA可能会碰到这种题,这种题可以有很多的做法,但是回归到最后的思维都是一样的。

好了废话不多说,下面就让我们的佩奇上题目。

题目:若一个串正向看和反向看等价,则称做回文串。
给出一个长度不超过100的字符串,判断是否是回文串。

输入格式:

首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每行输入一个长度不超过100的字符串(串中不包含空格)。

输出格式:

对于每组测试数据,判断是否是回文串,若是输出“Yes”,否则输出“No”。引号不必输出。

输入样例:

3
qwer
asdfdsa
qwerty

输出样例:

No
Yes
No

这样滴题目怕了没(哦哈哈哈!) 

具体做法:

#include<math.h>
#include<string.h>
int main()
{
    int t,i,j,k ;
    char ch[100];
    scanf("%d",&t);
    for(i=0;i<t;i++)
    {
		scanf("%s",ch);
		int x=1;
		k=strlen(ch)-1;
		for(j=0;j<k;j++,k--){
			if(ch[j]!=ch[k]){
				x=0;
				break;
			}
		}
		if(x==1){
			printf("Yes\n");
		}else
		printf("No\n");
	
	}

    }

这个是一维数组的具体做法,但是这样子输出的并不是像上面样例那样子,而是这样(但在PTA里也判断正确)

3
qwer
No
asdfdsa
Yes
qwerty
No

大家看到这可能觉得这个博主不太好咧,又不做注释,懒得要死,其实俺很勤奋滴,

可能又有些小调皮说那有没有二维的啊?

very good ,当然有啦,而且我个人比较认可用二维字符数组做这道题,废话不多说,上代码!!!!!!!!

#include<stdio.h>
#include<string.h>
void main()
{
    char ch[60][60];//先建立一个二维数组 
    int i,len,n;
    
   scanf("%d",&n);//输入行数 
   
   for(i=0;i<=n;i++){//第一个循环,做的是循环字符数组 
   //这里可能大家会疑惑为什么要等于n,因为当i=0时,第一个循环其实是把我的输入行数给吞了,就是说ch[0]=n 
         gets(ch[i]); //所以我这里就是从ch[1]开始才吞字符串进去 
	    
   }
  for(i=1;i<=n;i++){//当i=1时,就第一个字符串先进去遍历 
  	    len=strlen(ch[i]);//计算字符数组的个数 
  	   // printf("%d",len); 
  for(int j=0;j<len/2;j++){
  	if(ch[i][j]==ch[i][len-j-1]){//第一个与最后一个比较,如果相等就输出Yes,否则No 
	  	printf("Yes\n");
	  	break;
	  }else{printf("No\n");
	  break;
	  }
  }
	        
  } 
       
    }
3
qwer
asdfdsa
qwerty
No
Yes
No

这样就可以输出跟样例一样啦,要是还有看不懂的可以询问,不过概念不太熟悉的还是建议去回顾一下(但是用二维在pta不一定能对,我也没试过,主要是想告诉大伙们这样做也可以)

如果有什么错误的地方,可以大胆斧正哦!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值