C++;回文布尔函数(使用指针) 如何在C++中创建回文函数?我使用两种函数类型(bool和void)。 这是到目前为止我的代码(我真的非常感谢您的帮助,以及为什么我的代码不起作用?) #include <iostream> #include <cctype> #include <cstdlib> #include <string> using namespace std; void reverse(char *); bool isPalindrome(char *); int main() { char a[10]; cout << "string "; cin.getline(a, 10); if (palindrome(a)) cout << "true"; else cout << "false"; return 0; } void reverse(char *s) { char *point = s; int i, min; for (i = 0; *point != '\0'; i++) point++; min = i; point--; for (i = min; i > 0; i--) { cout << *point--; } } bool ispalindrome(char *s) { bool status; char *original = s; char *point = s; reverse(point); for (int i = 0; point != '\0'; i++) { if (point[i] == original[i]) status = true; else status = false; } return status; } #包括 #包括 #包括 #包括 使用名称空间std; 无效反向(字符*); bool isPalindrome(char*); int main() { chara[10]; 这里有几点可以改进。最直接的问题是,isAlindrome函数中的for循环没有终止。请将终止条件更改为point[i]!='\0'

C++;回文布尔函数(使用指针) 如何在C++中创建回文函数?我使用两种函数类型(bool和void)。 这是到目前为止我的代码(我真的非常感谢您的帮助,以及为什么我的代码不起作用?) #include <iostream> #include <cctype> #include <cstdlib> #include <string> using namespace std; void reverse(char *); bool isPalindrome(char *); int main() { char a[10]; cout << "string "; cin.getline(a, 10); if (palindrome(a)) cout << "true"; else cout << "false"; return 0; } void reverse(char *s) { char *point = s; int i, min; for (i = 0; *point != '\0'; i++) point++; min = i; point--; for (i = min; i > 0; i--) { cout << *point--; } } bool ispalindrome(char *s) { bool status; char *original = s; char *point = s; reverse(point); for (int i = 0; point != '\0'; i++) { if (point[i] == original[i]) status = true; else status = false; } return status; } #包括 #包括 #包括 #包括 使用名称空间std; 无效反向(字符*); bool isPalindrome(char*); int main() { chara[10]; 这里有几点可以改进。最直接的问题是,isAlindrome函数中的for循环没有终止。请将终止条件更改为point[i]!='\0',c++,function,boolean,palindrome,C++,Function,Boolean,Palindrome,第二,反向函数实际上并不是反向的。如果你想使用这种算法,你需要为反向字符串分配内存。更好的方法是在字符串的前面放一个指针,在字符串的末尾放一个指针,然后将它们移动到字符串的中间。你不需要将字符串反向到检查它是否有回文 该算法的工作原理如下: 获取字符串的长度; 从零到字符串长度循环2; 比较位置循环计数上的字符与长度减去循环计数减去1; 如果不相等,则不是回文; 如果循环完成,则为回文 例如:“测试”: 第一步:比较“t”和“t” 第二步:将“e”与“s”进行比较-->不是回文 例如“palap

第二,反向函数实际上并不是反向的。如果你想使用这种算法,你需要为反向字符串分配内存。更好的方法是在字符串的前面放一个指针,在字符串的末尾放一个指针,然后将它们移动到字符串的中间。

你不需要将字符串反向到检查它是否有回文

该算法的工作原理如下:

获取字符串的长度;
从零到字符串长度循环2;
比较位置循环计数上的字符与长度减去循环计数减去1;
如果不相等,则不是回文;
如果循环完成,则为回文

例如:“测试”:
第一步:比较“t”和“t”
第二步:将“e”与“s”进行比较-->不是回文

例如“palap”:
第一步:比较“p”和“p”
第二步:比较“a”和“a”
第三步:比较“l”和“l”
现在我们知道这是一个回文

试试这个:

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

int palindrom(char * s){
  int i;
  int l = strlen(s);
  for(i=0;i<=l/2;i++)
    if(s[i]!=s[l-i-1]) return 0;
  return 1;
}

int main(void) {
  char * test = "test";
  char * pal = "palap";
  printf("%s %d", test, palindrom(test));
  printf("%s %d", pal, palindrom(pal));
  return 0; 
}
#包括
#包括
#包括
整型回文(字符*s){
int i;
int l=strlen(s);

对于(i=0;i类似于@linluk使用指针而不是索引得出的答案

#include <cstring>
bool palindrome(char *s)  
{
    for (char *e = strchr(s, '\0'); -- e > s; ++ s)
        if (*e != *s)
            return false;
    return true;
}
#包括
布尔回文(char*s)
{
对于(char*e=strchr(s,'\0');--e>s;++s)
如果(*e!=*s)
返回false;
返回true;
}

最初,<代码> e <代码>,指向字符串的结尾,代码代码>指向开始。在每次迭代中,<代码> e <代码>后退,而<>代码> s>代码>前进,直到它们在中间相遇。如果它们指向另一个不同的字符,则测试失败。

所以,在我读到所有这些代码之前,你们得到了吗?提示一条错误消息,或者答案不正确?添加该细节,然后详细说明。如果是错误消息,请给出。如果是错误消息,请给出一些示例输入和输出。感谢您的回复。它给出了以下错误:线程1:EXC_BAD_访问(代码=1。地址=0x7fffSfc87000)当设置Stase= false时,应该中断循环(并且应该是一段时间,而不是一个),因为如果中间的2个字母等于,则返回真,即使其他字母都是不同的一般注释:1。这不是C++,2。您的<代码> ReSuffE()/代码>函数没有意义,3。
函数不正确。您可以通过从字符串的两端重复检查两个字符是否相等来简化此操作。或者使用一些标准库算法(
std::reverse()
,和
std::equal()
)@hidrargyro谢谢你的解释。我做了一些测试,现在我明白了如何使用status=false。给出代码的形式不好,为什么不描述解决方案呢?OP显然是个初学者……好的,对不起,我会解释一下,给我几分钟,我的英语不太好:)@linluk你的代码很棒。在这方面:if(s[I]!=[l-I-1])是否在引用('\0'或null终止符)时使用-1?因为字符串的第一个元素具有索引0而不是索引1。因此字符串“test”的长度为4,但最后一个字符('t')有索引3。谢谢:)我现在知道了。对于第二部分,我如何在字符串的前面和结尾放置指针?反向函数的前三行已经在这样做了。在该函数的第一个循环完成后,然后
指向字符串的结尾。将其后退一步(就像您所做的那样)所以它指向最后一个字符(或者提前终止循环一次)。非常感谢你的帮助。我现在就知道了。