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

ลบสมาชิกระหว่างสองศูนย์ในสตริงด้วย C++

ในบทความนี้ เราจะอภิบายวิธีการลบสมาชิกที่อยู่ระหว่างสองศูนย์จากสตริงที่กำหนดซึ่งประกอบด้วยตัวอักษร '0' และ '1' เท่านั้น สตริงสุดท้ายไม่ควรมีตัวอักษร '1' ที่ถูกล้อมรอบด้วย '0' เช่น:

Input : string = "110010" 
Output : "11000" 
Explanation: พบ 1 ระหว่างสองศูนย์ที่ index ที่ 4

Input : string = "0010" 
Output : "000" 
Explanation : พบ 1 ระหว่างสองศูนย์ที่ index ที่ 2

แนวทางแก้ปัญหา

เราสามารถใช้วิธีง่ายๆ คือวนลูปผ่านสตริง ตรวจสอบสมาชิกก่อนหน้าและถัดไปว่เป็นศูนย์หรือไม่ หากใช่ และสมาชิกปัจจุบันคือ '1' ให้ลบสมาชิกนั้นออก แล้วอัปเดตความยาวและพิมพ์สตริงใหม่

ตัวอย่างโค้ด

#include <bits/stdc++.h>
using namespace std;

int main() {
    string str = "110010";
    int length = str.length();
    
    for (int i = 1; i < length - 1; i++) {
        // ตรวจสอบสมาชิกระหว่างสองศูนย์
        if ((str.at(i - 1) == '0' && str.at(i + 1) == '0')) {
            // ลบสมาชิกถ้าพบระหว่างสอง 0
            str.erase(i, 1);
            i--;
            if (i > 0 && str.at(i - 1) == '0')
                i--;
            // อัปเดตความยาวหลังลบ
            length = str.length();
        }
    }
    
    cout << "String after removing elements between the two zeros: " << str;
    return 0;
}

ผลลัพธ์

String after removing elements between the two zeros: 1100

การทำงานของโค้ด

  • ใช้ลูปเดินจาก index 1 ถึง (length - 1)
  • ตรวจสอบ index ก่อนหน้าและถัดไปว่เป็น '0' หรือไม่
  • ลบตัวอักษรที่ index นั้นถ้าเป็น '1'
  • อัปเดตตัวแปร length ใหม่
  • สุดท้ายพิมพ์สตริงที่อัปเดตแล้ว

สรุป

ในบทความนี้ เราอภิบายการลบสมาชิกระหว่างสองศูนย์จากสตริงที่มีแค่ '0' และ '1' พร้อมโค้ด C++ สามารถเขียนในภาษาอื่นได้เช่น C, Java, Python หวังว่าจะเป็นประโยชน์