21xrx.com
2024-12-22 23:43:39 Sunday
登录
文章检索 我的文章 写文章
C++编程: 判断字符串是否为回文字符串
2023-07-05 07:57:48 深夜i     --     --
C++ 字符串 回文字符串 判断

在C++编程中,判断字符串是否为回文字符串是一项常见的任务。回文字符串是指正反顺序都相同的字符串。比如“level”或“noon”就是回文字符串。判断一个字符串是否为回文字符串的方法有很多种,下面介绍几种常用的方法。

第一种方法是将字符串反转后与原字符串比较。这种方法相对简单,只需要将字符串反转即可。反转的方法可以用C++标准库中的 reverse 函数。代码如下:


#include <iostream>

#include <algorithm>

using namespace std;

bool isPalindrome(string s) {

  string reversed = s;

  reverse(reversed.begin(), reversed.end());

  return s == reversed;

}

int main() {

  string s1 = "level";

  string s2 = "noon";

  string s3 = "hello";

  cout << s1 << " is a palindrome? " << isPalindrome(s1) << endl;

  cout << s2 << " is a palindrome? " << isPalindrome(s2) << endl;

  cout << s3 << " is a palindrome? " << isPalindrome(s3) << endl;

  return 0;

}

第二种方法是使用双指针。首先定义两个指针分别指向字符串的开头和结尾。然后分别向中间移动,判断每个字符是否相等。如果出现不相等的字符,就说明这个字符串不是回文字符串。代码如下:


#include <iostream>

using namespace std;

bool isPalindrome(string s) {

  int left = 0;

  int right = s.length() - 1;

  while (left < right) {

    if (s[left] != s[right])

      return false;

    

    left++;

    right--;

  }

  return true;

}

int main() {

  string s1 = "level";

  string s2 = "noon";

  string s3 = "hello";

  cout << s1 << " is a palindrome? " << isPalindrome(s1) << endl;

  cout << s2 << " is a palindrome? " << isPalindrome(s2) << endl;

  cout << s3 << " is a palindrome? " << isPalindrome(s3) << endl;

  return 0;

}

第三种方法是使用递归。对于一个字符串,如果它的第一个字符和最后一个字符相同,那么它就是回文字符串,否则它就不是回文字符串。代码如下:


#include <iostream>

using namespace std;

bool isPalindrome(string s) {

  if (s.length() <= 1)

    return true; // 空字符串或单个字符一定是回文字符串。

  

  if (s[0] == s[s.length() - 1]) {

    return isPalindrome(s.substr(1, s.length() - 2)); // 递归调用,判断去掉首尾字符的字符串是否为回文字符串。

  } else

    return false;

  

}

int main() {

  string s1 = "level";

  string s2 = "noon";

  string s3 = "hello";

  cout << s1 << " is a palindrome? " << isPalindrome(s1) << endl;

  cout << s2 << " is a palindrome? " << isPalindrome(s2) << endl;

  cout << s3 << " is a palindrome? " << isPalindrome(s3) << endl;

  return 0;

}

无论使用哪种方法,判断字符串是否为回文字符串都不难,关键在于要了解各种方法的优缺点,根据具体情况选择合适的方法。

  
  
下一篇: 0.25的问题求解

评论区

{{item['qq_nickname']}}
()
回复
回复