c++ - 比较字符串中的字符(由 "="操作符修改)

标签 c++ string

我正在尝试使用 isLarger() 比较两个字符串整数,如果 a 大于 b 则返回 true。

如果我在 main() 中输入 31232 (inputString="31232"),getPalindrome() 将其转换为 31213 (changedString="31213"),但是 isLarger(changedString,inputString) 结果始终为真。

但如果我输入 12345(转换为 12321),结果始终为假。

我认为我的代码中存在一些对 C++ 的基本误解或逻辑疏忽,但我无法弄清楚。我猜问题可能来自比较本身或 getPalindrome() 中的 output[lg-1-i]=input[i]; 我试图用 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 中的 any 字符大于 b 中的等效字符,则返回 true。

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

关于c++ - 比较字符串中的字符(由 "="操作符修改),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19266953/

相关文章:

java - 使用字符串变量Android创建对象的最佳方法

printf() 中可以有 '+' 运算符吗?

javascript - 有没有一种方法可以缩短字符串唯一 ID 数组,同时仍确保唯一性?

c - Malloc 分配超出范围的内存地址

c++ - 使用 Xcode 4.5 调试 c++ 时,单步执行代码会停止在 STL 代码上

c++ - 使用 RE2::GlobalReplace 转义字符串

c++ - 如何设置两个 vector<unique_ptr<...>> 彼此相等?

PHP 字符串 - 删除数组或单词并检查其他

c++ - 使用分支启动函数

c++ - 构造函数在错误的时间调用