[英]C++ palindrome not working
我想創建一個根據輸入是否為回文而返回true / false的函數,當給出abcddcba或aba時,它不會給出true,但是應該。 請幫助
bool checkPalindrome(char input[],int p=0) {
if(input[1]=='\0'){
return true;
}
if(sizeof(input)%2==0) {
int a = sizeof(input);
for(int i=0;i<(a/2);i++) {
if(input[0+i]==input[a-i-2]){
p++;
}
}
if(p==a/2){
return true;
} else{
return false;
}
}
else{
int a = sizeof(input);
for(int i=0;i<((a-1)/2);i++)
{
if(input[0+i]==input[a-i-2]){
p++;
}
}
if(p==(a-1)/2){
return true;
} else{
return false;
}
}
}
C ++樣式:
bool checkPalindrome(const std::string& str)
{
size_t len = str.size();
for (size_t i = 0; i < len/2; i++)
{
if (str[i] != str[len-1-i])
return false;
}
return true;
}
C風格:
bool checkPalindrome(const char* str)
{
size_t len = str ? strlen(str) : 0;
for (size_t i = 0; i < len/2; i++)
{
if (str[i] != str[len-1-i])
return false;
}
return true;
}
無論哪種情況,您都可能需要評估(詢問)是否應將空字符串視為回文。
您的代碼太長。 有一個簡單的方法:在比較n-1與0以及n-2與1比較的字符串元素上迭代一次,依此類推。
如果兩個字符不相同,則返回false,否則繼續檢查:
bool checkPalindrome(char* str) {
const int size = strlen(str);
for(int i(0), j(size) - 1); i < size / 2; i++, j--)
if(str[i] != str[j])
return false;
return true;
}
int main(){
char* str = "level";
cout << checkPalindrome(str);
cout << endl << endl;
return 0;
}
基於字符串和迭代器的C ++版本(僅出於完整性考慮,其他答案已經非常好了):
bool checkPalindrome(const string& str) {
for (auto p = str.begin(),q = str.end(); p!=q && p!=q+1; p++ )
if (*p!=*--q) // if char from front doesn't match char from rear ?
return false; // then it's not a palindrome !
return true;
}
說明:迭代器p
從字符串的開頭開始,而q
在字符串的后面(最后一個字符之后)。 p
將前進而q
將后退。 如果p
達到q
或p
已超過q
(特殊情況下單詞長度為偶數),則結束,我們可以得出回文式。 但是如果以前,在p
處的字符和在q
之前的字符之間有任何區別,則不是回文。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.