21xrx.com
2024-09-20 01:11:27 Friday
登录
文章检索 我的文章 写文章
C++实现回文字符串判断
2023-07-01 03:36:27 深夜i     --     --
C++ 回文字符串 实现 判断

回文字符串是指从左至右读和从右至左读结果完全相同的字符串,例如“level”、“racecar”、“noon”等等。如何利用C++语言实现回文字符串的判断呢?本文将为大家介绍一种简单实用的方法。

首先,我们需要明确的是,对于一个字符串,它的回文判断分两种情况讨论。一种是字符串长度为偶数的情况,例如“abba”;另一种是字符串长度为奇数的情况,例如“abcba”。下面分别从两种情况出发,给出相应的实现方法。

对于长度为偶数的字符串,我们可以采用双指针法。我们定义两个指针,一个指向字符串开头,另一个指向字符串结尾,每次比较两个指针指向的字符是否相等。如果相等,则将左指针右移一位,右指针左移一位,继续比较;如果不相等,则说明该字符串不是回文字符串。

下面是实现代码:


bool isPalindrome(string str) {

  int left = 0;

  int right = str.size() - 1;

  while (left < right) {

    if (str[left++] != str[right--])

      return false;

  }

  return true;

}

对于长度为奇数的字符串,我们可以先将其中间的字符当作中心点,分别从中心点向两侧扩展。具体实现时,我们可以采用两种不同的方法。一种是在双指针法的基础上,以中心点为轴心,分别将左右指针左移或右移一位,然后继续比较两个指针指向的字符是否相等。另一种则是直接用一个for循环来遍历整个字符串,判断是否对称。

下面是两种实现方法对应的代码:

方法一:


bool isPalindrome(string str) {

  int left = str.size() / 2 - 1;

  int right = str.size() / 2;

  while (left >= 0 && right < str.size()) {

    if (str[left--] != str[right++])

      return false;

  }

  return true;

}

方法二:


bool isPalindrome(string str) {

  int mid = str.size() / 2;

  for (int i = 0; i < mid; i++) {

    if (str[i] != str[str.size() - i - 1])

      return false;

  }

  return true;

}

综上所述,通过双指针法或简单的for循环,我们可以很容易地判断一个字符串是否为回文字符串。这种方法实现简单、易于理解,适用于各种不同的场景。因此,在编写C++程序时,我们可以根据具体情况选择适合自己的方法,实现字符串的回文判断。

  
  

评论区

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