Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengeluarkan Ruang Putih dengan Cekap daripada C Strings?

Bagaimanakah Saya Boleh Mengeluarkan Ruang Putih dengan Cekap daripada C Strings?

Barbara Streisand
Barbara Streisandasal
2024-12-17 20:07:15561semak imbas

How Can I Efficiently Remove Whitespace from C   Strings?

Menghapuskan Ruang Putih daripada Rentetan C

Dalam C , mengalih keluar ruang daripada rentetan boleh menjadi tugas biasa. Pendekatan naif akan melibatkan lelaran ke atas aksara dan membina rentetan baharu secara manual. Walau bagaimanapun, terdapat penyelesaian yang lebih cekap.

Algoritma

C STL menyediakan algoritma berkuasa yang dipanggil remove_if, yang boleh digunakan untuk tujuan ini. Algoritma ini mengambil fungsi predikat yang menentukan sama ada elemen perlu dialih keluar dan kemudian mengalih keluar semua elemen sedemikian daripada bekas.

Dalam kes ini, fungsi predikat yang kami minati ialah isspace, yang mengembalikan benar untuk ruang putih aksara dan palsu sebaliknya. Dengan menggunakan remove_if pada rentetan dengan predikat isspace, kita boleh menghapuskan semua aksara ruang putih.

Pelaksanaan

Setelah aksara ruang kosong telah dialih keluar menggunakan remove_if, kita perlu kecilkan rentetan kepada saiz baharunya. Ini boleh dicapai menggunakan kaedah padam. Berikut ialah pelaksanaan lengkap pendekatan ini:

#include <algorithm>
#include <string>

void remove_spaces(std::string& str)
{
    str.erase(std::remove_if(str.begin(), str.end(), std::isspace), str.end());
}

Pelaksanaan Tersuai remove_if

Algoritma remove_if daripada STL ialah fungsi generik yang boleh digunakan pada bekas melampaui rentetan. Walau bagaimanapun, untuk kes penggunaan khusus seperti ini, mungkin lebih mudah untuk melaksanakan versi tersuai yang disesuaikan dengan rentetan:

template <typename T>
T remove_if(T beg, T end, std::function<bool(char)> pred)
{
    T dest = beg;
    for (T itr = beg; itr != end; ++itr)
    {
        if (!pred(*itr))
        {
            *(dest++) = *itr;
        }
    }
    return dest;
}

Pelaksanaan tersuai ini meniru gelagat algoritma remove_if STL dan boleh digunakan khusus untuk bekas berasaskan aksara seperti std::string.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengeluarkan Ruang Putih dengan Cekap daripada C Strings?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn