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

ลบศูนย์นำหน้า (Leading Zeros) จากอาร์เรย์ใน C++

เราได้รับอาร์เรย์ และมีงานให้ลบศูนย์นำหน้า (leading zeros) ออกจากอาร์เรย์ที่กำหนด แล้วพิมพ์อาร์เรย์

Input : arr[] = {0, 0, 0, 1, 2, 3} 
Output : 1 2 3

Input : arr[] = {0, 0, 0, 1, 0, 2, 3} 
Output : 1 0 2 3

เราสามารถสร้างอาร์เรย์ใหม่ที่ไม่มีศูนย์นำหน้าของอาร์เรย์เดิมได้

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

ในวิธีนี้ เราจะเดินผ่านอาร์เรย์และใส่ตัวเลขทั้งหมดยกเว้นศูนย์นำหน้า

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

#include <iostream>
using namespace std;

int main() {
    int arr[] = {0, 0, 0, 1, 2, 0, 4};
    int n = sizeof(arr) / sizeof(int); // ขนาดอาร์เรย์ที่กำหนด
    int last = -1;
    
    for (int i = 0; i < n; i++) { // หาสมาชิกแรกที่ไม่ใช่ศูนย์
        if (arr[i] != 0) {
            last = i;
            break;
        }
    }
    
    if (last == -1)
        cout << "Empty\n";
    else {
        int b[n - last]; // อาร์เรย์ใหม่
        for (int i = last; i < n; i++) // ใส่สมาชิกในอาร์เรย์ใหม่
            b[i - last] = arr[i];
        for (int i = 0; i < n - last; i++) // พิมพ์อาร์เรย์
            cout << b[i] << " ";
    }
}

ผลลัพธ์

1 2 0 4

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

ในโปรแกรมนี้ เราเดินผ่านอาร์เรย์ arr หาดัชนีของสมาชิกแรกที่ไม่ใช่ศูนย์ เก็บไว้ในตัวแปร last หาก last ยังคงเป็น -1 หลังเดินครบ แสดงว่าอาร์เรย์ประกอบด้วยแต่ศูนย์ พิมพ์ "Empty"

เมื่อได้ดัชนีแรกที่ไม่ใช่ศูนย์ เราสามารถกำหนดขนาดอาร์เรย์ใหม่ได้คือ (n - last) จากนั้นวนลูปจาก last ถึง n-1 ใส่สมาชิกเหล่านี้ในอาร์เรย์ใหม่และพิมพ์

สรุป

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