鱼C论坛

 找回密码
 立即注册
查看: 869|回复: 3

[已解决]C++,写了个判断回文字符串的递归函数,不知道错在哪儿

[复制链接]
发表于 2022-3-19 21:19:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. bool Palin(string t)
  2.     {
  3.         int i = t.size() - 1;
  4.         if(i + 1 == 1)
  5.             return true;
  6.         else
  7.         {
  8.             if(t[0] != t[i])
  9.                 return false;
  10.             else
  11.             {
  12.                 if(i - 1 == 0 || i - 1 == 1)
  13.                     return true;
  14.                 else
  15.                 {
  16.                     t.erase(0, 1);t.erase(i, i+1);
  17.                     return Palin(t);
  18.                 }
  19.             }
  20.         }
  21.     }
复制代码

求大哥指点一下
最佳答案
2022-3-19 22:20:27
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <string>


  4. bool palindrome(std::string str){
  5.     if(str.size() <= 1){
  6.         return true;
  7.     }
  8.     else if(str.front() != str.back()){
  9.         return false;
  10.     }
  11.     str.erase(str.size()-1, 1);
  12.     str.erase(0, 1);
  13.     return palindrome(str);
  14. }

  15. int main()
  16. {
  17.     std::string A = "abcdcba";
  18.     std::string B = "abcdefg";
  19.    
  20.     std::cout
  21.         << "A is palindrome: "
  22.         << std::boolalpha
  23.         << palindrome(A)
  24.         << std::endl
  25.         << "B is palindrome: "
  26.         << std::boolalpha
  27.         << palindrome(B)
  28.         << std::endl;

  29.     return 0;
  30. }
复制代码
  1. A is palindrome: true
  2. B is palindrome: false
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-19 22:20:27 | 显示全部楼层    本楼为最佳答案   
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <string>


  4. bool palindrome(std::string str){
  5.     if(str.size() <= 1){
  6.         return true;
  7.     }
  8.     else if(str.front() != str.back()){
  9.         return false;
  10.     }
  11.     str.erase(str.size()-1, 1);
  12.     str.erase(0, 1);
  13.     return palindrome(str);
  14. }

  15. int main()
  16. {
  17.     std::string A = "abcdcba";
  18.     std::string B = "abcdefg";
  19.    
  20.     std::cout
  21.         << "A is palindrome: "
  22.         << std::boolalpha
  23.         << palindrome(A)
  24.         << std::endl
  25.         << "B is palindrome: "
  26.         << std::boolalpha
  27.         << palindrome(B)
  28.         << std::endl;

  29.     return 0;
  30. }
复制代码
  1. A is palindrome: true
  2. B is palindrome: false
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-19 22:30:27 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. int palin(char *str)
  5. {
  6.         int len = strlen(str);
  7.        
  8.         if (len==1 || len==0) // 条件1, 结束条件
  9.         {
  10.                 return 1;
  11.         }
  12.         else
  13.         {
  14.                 if(str[0]!=str[len-1])
  15.                 {
  16.                         return 0;
  17.                 }
  18.                 else
  19.                 {
  20.                         str[len-1]='\0'; // 置最后一位为字符串结束位。
  21.                         return palin(++str); // 条件2,调用函数自身(str起始位移至下一位)
  22.                 }
  23.         }
  24. }

  25. int main(void)
  26. {
  27.         char str[]="abccba";
  28.         int b = palin(str);
  29.         printf("%d\n", b);
  30. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-20 15:13:20 | 显示全部楼层
草搞懂了,16行应该是t.erase(i, i+1);t.erase(0, 1);,我顺序搞错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 16:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表