检查回文,用指针运算替换数组下标追踪数组位置 5C

单改指针的话是会的。但是这个涉及到主函数和检查回文函数都有数组下标,请问,主函数和被调用函数都可以用指针运算替换数组下标吗?怎么做?
另外,被调用函数还需要计算判断条件(n/2-1),这个怎么用指针表示呢
#include// 检查输入的句子是不是回文
#include
#define LEN 100
int compare(const char str[],int n);
int main(void)
{
char ch,str_1[LEN];
int i=0;
printf("Enter a message:");
while((ch=getchar())!='\n')//输入句子
if(toupper(ch)<=90&&toupper(ch)>=65)//是字母就存入数组
str_1[i++]=ch;
if(compare(str_1,i)==1)//调用compare函数,返回1是回文
printf("Plindrome\n");
else if (compare(str_1,i)==0)//调用compare函数,返回0不是回文
printf("Not a Plindrome\n");
return 0;
}
int compare(const char str[],int n)//检测回文的函数。
{
int i=0,a,b,flag;
for(i=0;i<=(n/2)-1;i++){
a=toupper(str[i]);
b=toupper(str[(n-1)-i]);
if(a!=b){
flag=0;
break;
}
else
flag=1;
}
return flag;
}

5个回答

可以用指针替换数组下标:
int compare(const char str[],int n)//检测回文的函数。
{
int i=0,a,b,flag;
const char sPtr;
sPtr = str;
for(i=0;i<=(n/2)-1;i++){
a=toupper(
(sPtr+i));
b=toupper(*(sPtr+(n-1)-i);
if(a!=b){
flag=0;
break;
}
else
flag=1;
}
return flag;
}

whyyouhitme_
whyyouhitme_ 而且这样并没有替代i的功能,还是靠i在记录数组的下标
一年多之前 回复
whyyouhitme_
whyyouhitme_ 兄弟,这就是困扰我的地方,你的(sPtr+(n-1)-i这个里面,你觉得自己做的是指针的运算,但是别忘了,你的 形式参数n是int型。你会说把n声明成指针就好了呀。然而,你再试一下
一年多之前 回复

怎么丢字符呢?
上面第5行 const char sPtr;
第8行 a=toupper(
(sPtr+i));

whyyouhitme_
whyyouhitme_ 但是没有替代i的功能啊,还是靠i++追踪数组位置
一年多之前 回复

奇怪,怎么打不上去星号呢

#define LEN 100
int compare(const char str[],int n);
int main(void)
{
char ch;
char str_1=NULL,*temp=NULL;
temp=(char *)malloc((LEN+1)*sizeof(char));
int i=0;
printf("Enter a message:");
while((ch=getchar())!='\n'){//输入句子
if(toupper(ch)<=90&&toupper(ch)>=65){//是字母就存入数组
*(++temp)=ch;
if(i==0)
str_1=temp;
i++;
}
}
if(compare(str_1,i)==1)//调用compare函数,返回1是回文
printf("Plindrome\n");
else if (compare(str_1,i)==0)//调用compare函数,返回0不是回文
printf("Not a Plindrome\n");
return 0;
}
int compare(const char str[],int n)//检测回文的函数。
{
int i=0,a,b,flag;
for(i=0;i<=(n/2)-1;i++){
a=toupper(
(str+i));
b=toupper(*(str+n-1-i));
if(a!=b){
flag=0;
break;
}
else
flag=1;
}

return flag;

}


main函数返回前少了个free(str_1-1);

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!