gpt4 book ai didi

C 中的带有回文检查器的字符指针

转载 作者:行者123 更新时间:2023-12-02 01:24:57 26 4
gpt4 key购买 nike

这是我编写的代码,用于检查字符串是否为回文。我需要修改这段代码,以便它在其中使用字符指针。有人可以给我一些建议/提示...或告诉我如何做到这一点吗?谢谢

#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main(){
char string1[20];
int i, length;
int flag = 0;
printf("Enter a string: ");
scanf("%s", string1);
length = strlen(string1);
for(i=0;i < length ;i++){
if(toupper(string1[i]) != toupper(string1[length-i-1])){
flag = 1;
break;
}
}
if (flag)
printf("%s is not a palindrome \n\n", string1);
else
printf("%s is a palindrome \n", string1);

return 0;
}

最佳答案

在您的代码中使用 string1[i]从字符串开头访问当前元素,并且 string1[length-i-1]从字符串末尾访问当前元素。您可以创建两个指针,pbpe ,然后将它们移向彼此。

要定义指针,请使用:

char *pb = &string1[0]; // Or just string1, compiler will convert it to pointer
char *pe = &string1[length-1];

要将指针向前推进,请使用 pb++pe-- 。要查看指针是否未相互交叉,请检查 pb < pe 。目前,您的程序会检查该字符串两次;没有必要这样做 - 你可以尽快停止pe变得小于或等于pb 。要访问当前指针指向的字符,请使用

toupper(*pb) != toupper(*pe)

您可以将检查与前进指针结合起来,如下所示:

toupper(*pb++) != toupper(*pe--)

注意:使用 %s 并不安全,因为当用户输入的字符多于 string1 中容纳的字符时缓冲区溢出结果。您应该指定缓冲区的长度,如下所示:

scanf("%19s", string1); // Leave one char for null terminator

关于C 中的带有回文检查器的字符指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18874546/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com