2013-10-09 3 views
0

isLarger()을 사용하여 두 문자열 정수를 비교하고 ab보다 큰 경우 true를 반환하려고합니다.문자열에서 문자 비교 ("="연산자로 수정 됨)

내가 입력 getPalindrome()main()에서 31,232 (inputString = "31232")를 31213로 변환하면 (changedString = "31213")하지만, isLarger(changedString,inputString)이 지속적으로 사실로 밝혀졌습니다.

그러나 12345 (12321로 변환)를 입력하면 일관되게 false가됩니다.

내 코드에는 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

아무것도 : 연습하려는 경우 , 여기에 올바른 방법인가? – juanchopanza

+0

@ Manu343726 : 나는 그것을 훌륭하게 부르지 않을 것이다. C++에서 물건을 트래버스하는 올바른 방법은 반복자입니다! –

+0

비교 연산자가 완벽하게 좋은 경우'std :: string'에 대한 자체 비교를 구현하는 이유는 무엇입니까? –

답변

2

isLarger의 논리가 올바르지 않습니다. 동일한 길이의 문자열의 경우 문자가 a 인 경우 true가 반환되고 b의 해당 문자보다 큽니다.

나는 개선을 제안 하겠지만 귀하의 의도가 무엇인지 잘 모르겠습니다. 나는 당신이 작성한 코드에서 그것을 포착하지 않았다는 것을 알고 있습니다.

+0

문제를 설명합니다 :'a = 44446'과'b = 55555'는 ** true **를 반환 할 것이고, 그렇게해서는 안됩니다. – WhozCraig

+0

@WhozCraig : Duh, 나는 너무 자상하여 좋은 조언 (또는 간단한 영어 읽기)을 제공하지 않습니다. –

+0

@MarceloCantos 너무 피곤해. * 나는 너무 피곤해. * 나는 이것이 회상과 그것의 기원이되는 비 - 합성에 있어야한다고 생각했다. 이런. – WhozCraig

1

john이 제안한대로 isLarger는 문자가 b의 해당 문자보다 큰 경우를 반환합니다. 당신은 단순히 작업을 수행 a > b을 사용할 수 있습니다. `changedString> inputString` 문제

//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 * exactly *. – WhozCraig