Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengeluarkan Ruang Putih dengan Cekap daripada 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!