C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++文字列をソートされた順序で並べ替えてから整数の合計を続ける


アルファベットの文字列を並べ替えた順序で並べ替えて、文字列に存在するすべての整数を追加する問題について話し合います。たとえば、

Input : str = “adv4fc3”
Output : “ acdfv7”
Explanation: all the letters have been sorted to “acdfv” followed by the sum of integers 4 and 3.

Input: str = “ h2d7e3f ”
Output: “ defh12”
Explanation: all the letters have been sorted to “defh” followed by the sum of integers 2, 7, and 3.

解決策を見つけるためのアプローチ

この問題で実行するタスクは2つあります。1つは文字列の並べ替えで、もう1つは整数値の追加です。

  • 文字列の並べ替えは、文字列内のすべての文字の数を保持し、その数に従ってすべての文字を挿入して新しい文字列を形成することで実行できます。

  • 整数を変数に追加するたびに、整数を追加することができます。

上記のアプローチの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;
    // traverse through all the characters of string.
    for (int i = 0; i < str.length(); i++){
        // keeping count of occurance every character.
        if (str[i]>='a' && str[i] <='z')
            ch[str[i] - 97] = ch[str[i] - 97] + 1;
        // If an Integer encounters.
        else
            count = count + (str[i]-'0');
    }
    string final = "";
    // Making a sorted string with the help of ch array.
    for (int i = 0; i < 26; i++){
        char a = (char)('a'+i);
        // insert the current character
        // to new string untill it count ends
        while (ch[i]-- != 0)
            final = final + a;
    }
   //  and finally insert sum of all integers in the string.
    if (count>0)
        final = final + to_string(count);
    cout << "Rearranged string: " << final;
    return 0;
}

出力

Rearranged string: defh12

上記のコードの説明

  • 26個のアルファベットの出現回数を保持する必要があるため、配列chはサイズ26で初期化されます。

  • 最初のループでは、文字列をトラバースしています。すべてのアルファベットについて、そのアルファベットの数を増やしています。すべての整数について、それをカウント変数に追加しています。

  • 2番目のループでは、すべてのカウントから新しいソートされた文字列を形成し、そのカウントに従って文字列に文字を追加します。

  • そして最後に、最初のループからカウントした整数の合計を文字列に追加します。

結論

このチュートリアルでは、文字列を並べ替える方法について説明し、ハッシュテーブルアプローチからそれに基づいて問題を解決しました。この問題のC++コードについても説明しました。 C、Java、Pythonなどの他のプログラミング言語で書くことができます。このチュートリアルがお役に立てば幸いです。


  1. C++で配列を均等に分割するために必要な最小の正の整数

    問題の説明 N個の正の整数の配列が与えられた場合、タスクは、配列の任意の2つの要素の間に配置できる最小の正の整数を見つけて、その前に発生するサブ配列内の要素の合計が、発生する要素の合計と等しくなるようにすることです。その後のサブ配列で、新しく配置された整数が2つのサブ配列のいずれかに含まれます 例 arr ={3、2、1、5、7、10}の場合、出力は6です。値6を5と7の間に置くと、左右のサブアレイの合計は次のように等しくなります- + 2 + 1 + 5 + 6 =17 7 + 10 =17 アルゴリズム 配列全体の合計をSで計算します アイデアは、インデックスi(それを含む)

  2. C++の別の文字列で定義されているアルファベット順に文字列の配列を並べ替えます

    文字列の配列があり、参照用に別の文字列があるとします。参照文字列を取得する必要があり、参照文字列内の文字の順序を使用して、文字列配列を並べ替えます。ここでは、配列内の文字列を検討しており、参照文字列は小文字です。 文字列配列が次のようになっているとします:[hello、 programming、 science、 computer、 india]、参照文字列は次のようになります: pigvxbskyhqzelutoacfjrndmw、出力文字列を並べ替えると[programming 」、「インド」、「科学」、「こんにちは」、「コンピューター」] タスクは簡単です。参照文字列をトラバースし