将 "Hello" 与 "olleH" 进行比较时遇到问题
FACING PROBLEM WHILE COMPARING "Hello" with "olleH"
我正在尝试用 c 编写一个程序,它可以识别一个字符串是否等于它的反转。
#include <stdio.h>
#include <string.h>
#include <conio.h>
int main(){
char str1[10] = "Hello";
if (str1 == strrev(str1)){
printf("True");
}
else{
printf("False");
}
getch();
return 0;
}
据我所知,它应该打印 False,但它打印的是 True。谁能解决这个问题。
谢谢
函数strrev
似乎没有创建新的字符数组。它原地反转字符串。所以在这个 if 语句中
if (str1 == strrev(str1)){
比较了指向同一个字符数组第一个元素的两个指针str1
。
要比较两个字符串,请使用标准 C 函数 strcmp
。例如
char str1[10] = "Hello";
char str2[10];
strcpy( str2, str1 );
if ( strcmp( str1, strrev(str2) ) == 0 ){
printf("True");
}
else{
printf("False");
}
如果你使用运算符 ==
你只是将 str1
内存地址指针与其自身进行比较,当然结果是正确的,尽管 strrev
修改了阵列。
正如前面的答案已经说过的,您应该创建字符数组 str1
的副本,而不是使用 strcmp
来比较两个数组。
我认为值得指出的是,无需创建原始字符串的副本即可检查回文。这将使代码运行得更快并且使用更少的内存。
#include <stdio.h>
#include <string.h>
int is_palindrome(const char *s) {
int n = strlen(s);
for (int i=0; i < n--; i++) {
if (s[i] != s[n]) return 0;
}
return 1;
}
int main() {
char *s1 = "racehorse";
char *s2 = "racecar";
printf("'%s' %s a palindrome\n", s1, is_palindrome(s1) ? "is" : "is not");
printf("'%s' %s a palindrome\n", s2, is_palindrome(s2) ? "is" : "is not");
return 0;
}
我正在尝试用 c 编写一个程序,它可以识别一个字符串是否等于它的反转。
#include <stdio.h>
#include <string.h>
#include <conio.h>
int main(){
char str1[10] = "Hello";
if (str1 == strrev(str1)){
printf("True");
}
else{
printf("False");
}
getch();
return 0;
}
据我所知,它应该打印 False,但它打印的是 True。谁能解决这个问题。 谢谢
函数strrev
似乎没有创建新的字符数组。它原地反转字符串。所以在这个 if 语句中
if (str1 == strrev(str1)){
比较了指向同一个字符数组第一个元素的两个指针str1
。
要比较两个字符串,请使用标准 C 函数 strcmp
。例如
char str1[10] = "Hello";
char str2[10];
strcpy( str2, str1 );
if ( strcmp( str1, strrev(str2) ) == 0 ){
printf("True");
}
else{
printf("False");
}
如果你使用运算符 ==
你只是将 str1
内存地址指针与其自身进行比较,当然结果是正确的,尽管 strrev
修改了阵列。
正如前面的答案已经说过的,您应该创建字符数组 str1
的副本,而不是使用 strcmp
来比较两个数组。
我认为值得指出的是,无需创建原始字符串的副本即可检查回文。这将使代码运行得更快并且使用更少的内存。
#include <stdio.h>
#include <string.h>
int is_palindrome(const char *s) {
int n = strlen(s);
for (int i=0; i < n--; i++) {
if (s[i] != s[n]) return 0;
}
return 1;
}
int main() {
char *s1 = "racehorse";
char *s2 = "racecar";
printf("'%s' %s a palindrome\n", s1, is_palindrome(s1) ? "is" : "is not");
printf("'%s' %s a palindrome\n", s2, is_palindrome(s2) ? "is" : "is not");
return 0;
}