Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

C++ จัดเรียงสตริงตามลำดับตัวอักษร ตามด้วยผลรวมของจำนวนเต็ม

อภิปรายปัญหาการจัดเรียงสตริงของตัวอักษรในลำดับที่จัดเรียงแล้ว และบวกจำนวนเต็มทั้งหมดที่มีอยู่ในสตริง ตัวอย่างเช่น:

Input : str = "adv4fc3"
Output : "acdfv7"
คำอธิบาย: ตัวอักษรทั้งหมดถูกจัดเรียงเป็น "acdfv" ตามด้วยผลรวมของจำนวนเต็ม 4 และ 3

Input: str = "h2d7e3f"
Output : "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 array
    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 << "Rearranged string: " << final;
    return 0;
}

ผลลัพธ์

Rearranged string: defh12

คำอธิบายโค้ด

  • อาร์เรย์ ch ถูกเริ่มต้นขนาด 26 เพราะเราต้องนับจำนวนการเกิดของ 26 ตัวอักษร
  • ในลูปแรก เราเดินทางผ่านสตริง สำหรับทุกตัวอักษร เราเพิ่มจำนวนของตัวอักษรนั้น สำหรับทุกจำนวนเต็ม เราบวกมันเข้าไปในตัวแปร count
  • ในลูปที่สอง เราสร้างสตริงใหม่ที่จัดเรียงแล้วจากจำนวนทั้งหมด ซึ่งเรา append ตัวอักษรในสตริงตามจำนวนของพวกเขา
  • และเรา append สตริงสุดท้ายกับผลรวมของจำนวนเต็มที่เรานับจากลูปแรก

สรุป

ในบทช่วยสอนนี้ เราอภิปรายวิธีการจัดเรียงสตริงในลำดับที่จัดเรียงแล้วและแก้ปัญหาที่เกี่ยวข้องจาก hash table approach เรายังอภิปรายโค้ด C++ สำหรับปัญหานี้ เราสามารถเขียนในภาษาโปรแกรมมิ่งอื่นๆ เช่น C, Java, Python ฯลฯ ได้ เราหวังว่าบทช่วยสอนนี้จะเป็นประโยชน์