2013-10-09 101 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