在刚学到字符数组呢,大家可能刚接触,没有怎么理解就开始做题了,碰到这种回文串的题可能会有点懵,在做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不一定能对,我也没试过,主要是想告诉大伙们这样做也可以)
如果有什么错误的地方,可以大胆斧正哦!