直接进入正题,在函数中是不能用sizeof(a)/sizeof(a[0])来求数组长度的,传入函数的是指针,传入的a只能作为地址,在函数里边,a只是作为一个指针,而不是a【】一整个数组,运行时编译器不知道以a表示的地址有多大。sizeof(a)只是一个指针的大小。
但是在这个题目中数组是字符串数组,可以用strlen(str)函数来求字符数组的长度,并且在函数里面不受影响。
***有兴趣的可以看一下,这是一个练习题,题目如下:
如果一串字符从左至右读和从右至左读相同,那么这串字符就是回文(Palindrome)。例如,ABCBA是回文,而ABCD则不是。本题要求编写一个判断字符串是否为回文的函数,并且通过函数参数获取字符串的中间字符(如果中间是两个字符,则获取靠左的那一个,例如字符串是ABCDEF,则中间字符是C)。题目保证输入的字符串长度在1至2000之间且不含空格、换行等分隔符。
函数接口定义:
int isPalindrome(const char* str, char* pch);
其中 str
和 pch
都是用户传入的参数。 str
是字符串的首地址; pch
是传入的要存放字符串中间字符的变量的地址。如果字符串是回文,函数须返1,否则返回0。
输入样例:
ABCDACBC
输出样例:
不是回文!中间字符是D
#include <stdio.h>
#include <string.h>
#define MAXLENGTH 100
//要求在这里写函数
int main(){
char str[MAXLENGTH],mid;
scanf("%s",str);
if(isPalindrome(str, &mid))
printf("是回文!中间字符是%c\n",mid);
else
printf("不是回文!中间字符是%c\n",mid);
return 0;
}
给出我的一个答案
int isPalindrome(const char* str, char* pch)
{
int i,n;
n=strlen(str);//在函数中用strlen()求出字符数组的长度
for(i=0;i<n;i++)
{
if(str[i]==str[n-1-i])
continue;
else
break;
}
if(n%2==0)
*pch=str[n/2-1];
else
*pch=str[n/2];
if(i==n)
return 1;
else
return 0;
}
参考自大佬的文章http://t.csdn.cn/LBnWY