2013-10-09 160 views
0

我試圖使用isLarger()來比較兩個字符串整數,如果a大於b,則返回true。比較字符串中的字符(通過「=」運算符修改)

如果我輸入31232在main()getPalindrome()(inputString = 「31232」),將其轉換爲31213(changedString = 「31213」),但isLarger(changedString,inputString)真可謂是真正的一致。

但是,如果我輸入12345(轉換爲12321),它會一直假。

我認爲在我的代碼中存在一些C++或邏輯疏忽的根本性誤解,但我無法弄清楚。我想這個問題可能來自於比較本身或output[lg-1-i]=input[i];getPalindrome(),我試圖用output.replace(lg-1-i,1,1,input[i]);替換它,但沒有運氣。

任何人都可以幫助弄清楚是什麼問題?謝謝。

#include <iostream> 
#include <string> 
using namespace std; 

//Compare if the string integer, return true if a > b 
bool isLarger(string a, string b) { 
    if (a.length() != b.length()) return a.length() > b.length(); 
    for(size_t i=0;i<a.length();i++) if (a[i] > b[i]) return true; 
    return false; 
} 

//Copy LHS of the string to RHS 
string getPalindrome(string input) { 
    string output=input; 
    int lg = input.length(); 
    int half_lg = (int)lg/2; 
    for (int i=0;i<half_lg;i++) { 
     output[lg-1-i]=input[i]; 
    } 
    return output; 
} 

int main() { 
    string inputString; 
    cin >> inputString; 
    string changedString = getPalindrome(inputString); 
    if (isLarger(changedString,inputString)) 
     cout << changedString<< "\n"; 
    return 0; 
} 

===========

謝謝大家對我的幫助。我是C++的新手,並且很抱歉提出這樣的愚蠢問題。對任何人都好奇。我寫的代碼:http://www.spoj.com/problems/PALIN/

+3

任何問題'changedString> inputString'? – juanchopanza

+0

@ Manu343726:我不會說它做得好。在C++中遍歷事物的正確方法是使用迭代器! –

+0

當你有一套完美的比較運算符時,你爲什麼要爲'std :: string'實現自己的比較? –

回答

2

isLarger函數中的邏輯錯誤。對於等長字符串,如果中的任何字符在a中的字符大於b中的等效字符,則返回true。

我建議改善,但我不確定你的意圖是什麼。我只知道你沒有在你寫的代碼中捕獲它。

+0

它確實解釋了這個問題:'a = 44446'和'b = 55555'將返回** true **,它不應該。 – WhozCraig

+0

@WhozCraig:杜,我太累了,不能提供很好的建議(或者閱讀簡單的英文)。 –

+0

@MarceloCantos你太累了。 *我太累了*我剛剛意識到這應該是在迴文和它的原始非綜合,我的樣本*不*反映。咄。 – WhozCraig

1

正如約翰建議的,isLarger返回如果任何字符在a是大於等效於b。你可以簡單地使用a > b這個工作。 在你想練的情況下,這裏是正確的方法:

//Compare if the string integer, return true if a > b 
bool isLarger(string a, string b) 
{ 
    if (a.length() != b.length()) 
    return a.length() > b.length(); 
    for(size_t i = 0; i < a.length(); i++) 
    { 
    if (a[i] > b[i]) 
     return true; 
    else if(a[i] < b[i]) 
     return false; 
    } 
    return false; //strings are equal. 
} 
+0

這些字符串的長度相同,並且字符將與所述字符串正確比較。簡單地返回(a> b)就足夠了。 – WhozCraig

+1

當一個簡單的'return a> b'會做什麼時,爲什麼這麼複雜? – juanchopanza

+0

@juanchopanza *完全*。 – WhozCraig