簡體   English   中英

C++ 表示回文

[英]C++ indicate Palindrome

我對 C++ 編碼很陌生,需要你的幫助。 在下面的代碼中,我想檢查 Parlindrome 並顯示反轉文本。 因此,如果我運行此代碼,它會顯示正確的反向單詞,但如果檢查 parlindrome,則不會將它們返回 true。

控制台顯示: madam0 ada0 ecalevol0

為什么返回總是0?

謝謝你的幫助!

#include <iostream>

// Define is_palindrome() here:

bool is_palindrome(std::string text) {
  std::string text_reversed;

  for(int i = text.length(); i >= 0; i-- ) {
    text_reversed += text[i];
    std::cout << text[i];
  }

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

int main() {
  
  std::cout << is_palindrome("madam") << "\n";
  std::cout << is_palindrome("ada") << "\n";
  std::cout << is_palindrome("lovelace") << "\n";
}

你的itext.length()開始,而不是text.length() - 1

所以,你的第一個text[i]是一個空字節(是的,即使對於std::string ,這也是有保證的)。

因此,第一個字符text_reversed是一個“隱藏”的字符是不存在的text ,兩個永遠不會匹配。

std::string reversed_string(const std::string& s)
{
    return {s.rbegin(), s.rend()};
}

bool is_palindrome(const std::string& s)
{
    return std::equal(s.begin(), s.begin() + s.size() / 2, s.rbegin());
}

std::equal 的文檔有is_palindrome例子

你最大的問題是i>=0text[i] 它應該是i>0text[i-1]

並請簡化該退貨聲明。

#include <iostream>

bool is_palindrome(std::string text) {

  std::string text_reversed = "";

  for(int i = text.length(); i > 0; i-- ) {
    text_reversed += text[i-1];
  }
  std::cout << text_reversed <<std::endl;
  std::cout << text <<std::endl;

  return text == text_reversed;
}

int main() {
  std::cout << is_palindrome("madam") << std::endl;
  std::cout << std::endl;
  std::cout << is_palindrome("ada") << std::endl;
  std::cout << std::endl;
  std::cout << is_palindrome("lovelace") << std::endl;
  std::cout << std::endl;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM