习题1.1
题目:
“回文”是正读和反读相同的字符串,如“232”,“XYZAZYX”等。编写字符串实现判断字符串是否是回文。
代码:
#include<stdio.h>
#include<string.h>
#include<math.h>
int HuiWen(char s[])
/*回文判断,如果是回文,返回1,否则返回0*/
{
char *start=s,*end=s+strlen(s)-1; /*初始化start和end,分别指向字符串的第一个字符和最后一个字符*/
for(;end>start;end--,start++) /*将start和end指向的字符依次比较,如果*start=*end,则start向后移动,end向前移动*/
if(*start!=*end) /*如果*start≠*end,则停止比较并退出循环*/
break;
return end<=start; /*如果是回文返回1,否则返回0*/
}
void main()
{
char *s[]={"123321","XYZAZYX","1232"};
int i;
for(i=0;i<sizeof s/sizeof(s[0]);i++)
{
if(HuiWen(s[i])==1)
printf("字符串%s是回文!\n",s[i]);
else
printf("字符串%s不是回文!\n",s[i]);
}
}
其他:
注意1:
printf("sizeof(s)_____%d____\n",sizeof(s));
printf("sizeof(s[0])______%d____\n",sizeof(s[0]));
printf("s[0]___%s____\n",s[0]);
printf("strlen(s)_______%d____\n",strlen(s));
printf("sizeof(char*)____%d____\n",sizeof(char*));
printf("sizeof(char)_____%d____\n",sizeof(char));
printf("%p____%p____%p\n\n",s,s[0],s[1]);
sizeof(s)_____24____
sizeof(s[0])______8____
s[0]___123321____
strlen(s)_______3____
sizeof(char*)____8____
sizeof(char)_____1____
0x7fffd2263060____0x4007bd____0x4007c4
注意2:
在代码中char型的s+strlen(s)-1是什么意思?
s应该是一个字符串吧?
那么s同时也是首字符地址
strlen(s)为s的长度
那么s+strlen(s)-1就是字符串的末尾地址