C语言对称字符串

编程,输入若干(不多于10)个字符串,每个字符串长度不超过80个字符,输入空字符串表示输入结束,然后将其中的对称字符串按长度升序,长度相等则按大小升序输出,每个一行,如果... 编程,输入若干(不多于10 )个字符串,每个字符
串长度不超过80个字符,输入空字符串表示输入
结束,然后将其中的对称字符串按长度升序,长
度相等则按大小升序输出,每个一行,如果没有
对称字符串,则输出None.,判断字符串是否对称
时要求使用指针
#include<stdio.h>
#include<string.h>
int symmetry(char *str)
{char *p,*q;
p=str;q=str+strlen(str)-1;
for(;p<q;p++,q--)
if(*p!=*q)break;
if(p>=q) return 0;
else return 1;
}
main()
{
char s[11][81],t[81];int i,j,n;
for(n=0;n<11;n++)
{gets(s[n]);
if(s[n]=='\0') break;
if(symmetry(s[n])==1) n--;}
if(n==0)
printf("None.");
else
{for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(strlen(s[i])>strlen(s[j])||strlen(s[i])==strlen(s[j])&&strcmp(s[i],s[j])>0)
{strcpy(t,s[i]);strcpy(s[i],s[j]);strcpy(s[j],t);}
for(i=0;i<n;i++)
puts(s[i]);}
}主函数中if(s[n]=='\0') break;错了,可改成if(*s[n]=='\0') break后就对了,为什么?*s[n]表示的是什么意思?
展开
 我来答
kabbin2010
2011-10-28 · 超过13用户采纳过TA的回答
知道答主
回答量:39
采纳率:0%
帮助的人:42.3万
展开全部
指针s指向的是一个二维数组,这里s[n]相当于一个指向字符串的指针,它的值是字符串在内存中的地址,所以f(s[n]=='\0') break错了。*s[n]指向由s[n][0]到s[n][80]字符组成的字符串
追问
可是如果我定义s[3]=“abc”  我就可以写成是s[n],不需写成*s[n]啊,这个字符串一维数组和二维数组有什么区别吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
汪好帅
2011-10-28 · TA获得超过2829个赞
知道大有可为答主
回答量:1177
采纳率:0%
帮助的人:1409万
展开全部
s是一个二维数组,则s[n]表示数组首地址,*s[n]取首地址里的字符值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a530963
2011-10-28 · TA获得超过114个赞
知道答主
回答量:95
采纳率:0%
帮助的人:57.7万
展开全部
s[n]是地址
*s[n] 是地址里面的值(也就是内容)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
heizeer
2011-10-28 · TA获得超过135个赞
知道答主
回答量:74
采纳率:0%
帮助的人:64.7万
展开全部
s[n]表示的是s[n][0]的地址,*s[n]当然就表示s[n][0]这个元素了
追问
可是我定义的s[11][81]]是字符串数组啊? 什么时候s[n]表示的是地址了啊?s[n]表示的不就是内容吗?
追答
你定义的是二维数组,如果是一维的比如s[11],那s[n]就表示元素了。实际上C的二维数组就是数组的数组。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式