Сравнить символ в строке (который изменяется оператором «=»)

0

Я пытаюсь использовать isLarger() для сравнения двух целых чисел и возвращает true, если a больше b.

Если я введу 31232 (inputString = "31232") в main(), 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/

Теги:
string

2 ответа

2
Лучший ответ

Логика в вашей функции isLarger неверна. Для строк с равной длиной возвращает true, если любой символ в a больше эквивалентного символа в b.

Я бы предложил улучшение, но я не совсем уверен, каково ваше намерение. Я просто знаю, что вы не захватили его в коде, который вы написали.

  • 0
    Это объясняет проблему: a=44446 и b=55555 вернут истину , а это не должно.
  • 0
    @WhozCraig: Да, я слишком устал, чтобы давать хороший совет (или читать простой английский).
Показать ещё 2 комментария
1

Как предположил Джон, isLarger возвращает, если любой символ в больше, чем эквивалент в 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).
  • 1
    Зачем все так усложнять, когда простой return a > b подойдет?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню