比较字符串中的字符(由"="运算符修改)

Compare character in string (which is modified by "=" Operator)

本文关键字:运算符 修改 字符串 字符 比较      更新时间:2023-10-16

我正在尝试使用 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/

isLarger函数中的逻辑不正确。对于等长的字符串,如果 a 中的任何字符大于 b 中的等效字符,则返回 true。

我建议改进,但我不确定你的意图是什么。我只知道你没有在你编写的代码中捕获它。

正如 John 所建议的,如果 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.
}