我正在尝试使用isLarger()
比较两个字符串整数,如果a
大于b
,则返回true。
如果我在main()
中输入31232(inputString =“31232”),getPalindrome()
会将其转换为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/
答案 0 :(得分:2)
isLarger
功能中的逻辑不正确。对于等长字符串,如果a
中的任何字符大于b
中的等效字符,则返回true。
我建议改进,但我不确定你的意图是什么。我只知道你没有在你编写的代码中捕获它。
答案 1 :(得分:1)
正如约翰所建议的那样,如果a中的任何字符大于b中的等价字符,则isLarger会返回。您可以简单地使用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.
}