C++ 按排序顺序重新排列字符串,然后是整数和

c++server side programmingprogramming

讨论一个问题,按排序顺序重新排列一串字母,并添加字符串中存在的所有整数,例如

输入:str = “adv4fc3”
输出:“ acdfv7”
说明:所有字母都已排序为“acdfv”,然后是整数 4 和 3 的总和。

输入:str = “ h2d7e3f ”
输出:“ defh12”
说明:所有字母都已排序为“defh”后面跟着整数 2、7 和 3 的和。

寻找解决方案的方法

我们在这个问题中有两个任务要执行,一个是对字符串进行排序,另一个是添加整数值。

  • 可以通过保留字符串中每个字母的数量,然后根据字母的数量插入所有字母来形成新字符串,从而对字符串进行排序。

  • 我们可以通过在每次出现整数时将整数添加到变量中来执行整数的加法。

示例

上述方法的 C++ 代码

#include<bits/stdc++.h>
using namespace std;
const int MAX_CHAR = 26;
int main(){
    string str = "h2d7e3f";
        int ch[26] = {0};
    int count = 0;
    // 遍历字符串的所有字符。
    for (int i = 0; i < str.length(); i++){
        // 保持每个字符出现的次数。
          if (str[i]>='a' && str[i] <='z')
            ch[str[i] - 97] = ch[str[i] - 97] + 1;
        // 如果遇到整数。
          else
            count = count + (str[i]-'0');
    }
    string final = "";
    // 使用 ch 数组创建一个排序字符串。
    for (int i = 0; i < 26; i++){
        char a = (char)('a'+i);
        // 将当前字符插入
        // 插入到新字符串,直到计数结束
        while (ch[i]-- != 0)
            final = final + a;
    }
   //  最后插入字符串中所有整数的总和。
    if (count>0)
        final = final + to_string(count);
    cout << "重新排列的字符串:<< final;
    return 0;
}

输出

重新排列的字符串:defh12

上述代码的解释

  • 数组 ch 初始化为 26,因为我们需要保存 26 个字母的出现次数。

  • 在第一个循环中,我们遍历字符串。对于每个字母,我们都会增加该字母的计数。对于每个整数,我们都将其添加到 count 变量中。

  • 在第二个循环中,我们从所有计数中形成一个新的排序字符串,其中我们根据它们的计数将字符附加到字符串中。

  • 最后,我们将从第一个循环中计算出的整数总和附加到字符串中。

结论

在本教程中,我们讨论了如何按排序顺序排列字符串,并从哈希表方法中解决了基于它的问题。我们还讨论了此问题的 C++ 代码。我们可以用任何其他编程语言编写,如 C、Java、Python 等。我们希望您觉得本教程有用。


相关文章