这是我编写的代码,用于检查字符串是否为回文序列。我需要修改这段代码,以便它在其中使用字符指针。有人可以给我一些建议/提示......或者告诉我该怎么做?感谢
#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;
}
答案 0 :(得分:2)
在您的代码中,您使用string1[i]
从字符串的开头访问当前元素,使用string1[length-i-1]
从字符串末尾访问当前元素。您可以创建两个指针pb
和pe
,然后将它们朝向彼此移动。
要定义指针,请使用:
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
答案 1 :(得分:0)
我不确定我是否完全理解这个问题,但我认为这可以解决这个问题。你实际上是在使用字符指针。 char string1 [20]与char * string1相同。不同之处在于您基本上已将指针指向一块内存。你可以用这种方式访问字符串。
char string[20] = "foo";
printf("%c\n", string[0]); // will print 'f'
printf("%c\n", *string); // will also print 'f'
printf("%c\n", string[1]); // will print the first 'o'
printf("%c\n", *(string + 1)); // will also print the first 'o'
答案 2 :(得分:0)
使用char *就像这样
#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);
char *start=string1;
char *end=&string1[length-1];
//only check upto half
for(i=0;i <= (length-1)/2 ;i++)
{
if(toupper(*(start+i)) != toupper(*(end-i)))
{
flag = 1;
break;
}
}
if (flag)
printf("%s is not a palindrome \n\n", string1);
else
printf("%s is a palindrome \n", string1);
return 0;
}
答案 3 :(得分:0)
我们只是将原始字符串复制到另一个数组,然后使用strrev()来反转复制的字符串,然后最后将原始字符串与反向字符串进行比较?
喜欢这个
1.get new string
2.copy string to new array
3.reverse the copied string using strrev
4.use strcmp to check if both are same or not?
这似乎更容易
(我是初学者,所以如果我错了请纠正我)