首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单C++函数(is_palindrome)的逻辑问题

简单C++函数(is_palindrome)的逻辑问题
EN

Stack Overflow用户
提问于 2020-02-21 13:29:16
回答 2查看 67关注 0票数 1

下面的函数应该检查输入参数是否是回文,并返回true/false。

我知道代码中有一个错误,应该是: int = text.size() - 1

问题:如果我不添加"-1“并打印出文本和textR,它们都是”夫人“,据我理解,当我检查(文本== textR)时,这应该是真的。不过,它确实返回了false

有人能解释一下我错过了什么吗?

我知道这与string.size()和字符串内容不是同一回事有关,字符串索引从0开始.我还是不完全明白为什么要发短信!= textR。

代码语言:javascript
复制
#include <iostream>
#include <bits/stdc++.h> 

// Define is_palindrome() here:

bool is_palindrome(std::string text) {

  // create an empty string to store a reversed version of text 
  std::string textR;

// iterating backward over text and adding each character to textR
  for (int i = text.size(); i >= 0; i--) {
    textR.push_back(text[i]);
  }

std::cout << text << std::endl;
std::cout << textR << std::endl;

  // check if the reversed text is the same as text; return true or false

  if (text == textR) {
    return true;
  } else {
    return false;
  }
}

int main() {

  std::cout << is_palindrome("madam") << "\n";

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-21 13:32:15

text[text.size()]是不可打印的'\0' (nul字符)。

因此,TextR"\0madam"而不是预期的"madam"

票数 5
EN

Stack Overflow用户

发布于 2020-02-21 19:30:39

答案是给予并接受的。好的。

此外,我想给出这个函数或多或少的标准解决方案的答案。

这是一个典型的一个班轮:

代码语言:javascript
复制
#include <iostream>
#include <string>

bool is_palindrome(const std::string& s) { return s == std::string(s.crbegin(), s.crend()); };

int main()
{
    std::cout << "Is HannaH a palindrome?: " << is_palindrome("HannaH") << "\n";

    return 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60339643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档