[英]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";
}
你的i
從text.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>=0
和text[i]
。 它應該是i>0
和text[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.