【问题标题】:I need to swap out two values in a string for one (C++)我需要将字符串中的两个值换成一个(C++)
【发布时间】:2014-08-07 23:09:04
【问题描述】:

我正在制作一个罗马数字转换器。除了最后一个问题,我什么都想通了。

字符串看起来像IVV

我需要做到IX

我在每个新字母处拆分字符串,然后将它们重新附加,然后使用 if 语句查看它是否包含 2 个“V”。我想知道是否有更简单的方法来做到这一点。

【问题讨论】:

  • 给我们看一些代码,伙计。
  • 使用std::string 并利用它的findreplace 成员函数。
  • 您应该发布您的代码以寻找解决方案
  • 您需要哪部分代码?我只有一个字符串,我需要替换其中的某些字符。
  • @Fusion 有人要求您展示您已经尝试过的内容!只是说 'Gimme teh codez plz!' 在这里效果不佳:P ...

标签: c++ string split append


【解决方案1】:

你可以使用std stringfindrfind操作,它们找到输入参数的第一个和最后一个出现的位置,检查它们是否不相等,你就会知道

答案已更新

#include <string>

int main()
{
    std::string x1 = "IVV";
    if (x1.find('V') !=x1.rfind('V'))
    {
        x1.replace(x1.find('V'), 2, 'X');
    }
    return 0;
}

【讨论】:

    【解决方案2】:

    使用std::string 应该对您有很大帮助,因为您可以利用它的搜索和替换功能。您需要从 find 函数开始,该函数允许您搜索字符或字符串并返回您正在搜索的内容所在的索引,如果搜索失败,则返回 npos

    然后您可以调用replace,将find 返回的索引、要替换的字符数以及替换范围的内容传递给它。

    下面的代码应该可以帮助您入门。

    #include <string>
    #include <iostream>
    
    int main()
    {
        std::string roman("IVV");
    
        // Search for the string you want to replace
        std::string::size_type loc = roman.find("VV");
    
        // If the substring is found replace it.
        if (loc != std::string::npos)
        {
            // replace 2 characters staring at position loc with the string "X"
            roman.replace(loc, 2, "X");
        }
    
    
        std::cout << roman << std::endl;
        return 0;
    }
    

    【讨论】:

    • 与我一直反对另一个答案的原因相同。 Don't feed the help vampires!
    • 你没有在我的帐户上连续投票以回应这个?!?你有吗?
    • 我为什么要这样做?我完全不同意你的观点,但我不是数据库。
    • 好的,已经这么想了。我只是好奇......('DB'顺便说一句,我不知道这个快捷方式,你介意启发我吗?)
    • 啊,我明白了。不,你当然不是!我最喜欢并同意您的回答和cmets。 (我目前正在看“好汉两个半”,在那里你可以看到 DB 的行动;)...)
    猜你喜欢
    • 2020-08-31
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 2022-01-13
    • 2021-01-31
    • 1970-01-01
    • 2021-08-06
    相关资源
    最近更新 更多