Xóa chuỗi trong C++

Hướng dẫn cách xóa chuỗi trong C++. Bạn sẽ học được cách xóa 1 ký tự trong chuỗi C++, cách xóa ký tự cuối cùng trong chuỗi, cũng như là cách xóa chuỗi con trong C++ sau bài học này.

Xóa ký tự trong chuỗi C++

Trong ngôn ngữ C++ không tồn tại hàm có sẵn nào trong thư viện chuẩn giúp chúng ta xóa ký tự trong chuỗi C++ cả. Do đó chúng ta sẽ phải tự tạo hàm để giải quyết vấn đề này.

Để xóa 1 ký tự trong chuỗi C++ cũng khá đơn giản, chúng ta tạo ra một vòng lặp để lấy ra từng ký tự trong chuỗi ban đầu, và kiểm tra xem ký tự đó có giống với ký tự chỉ định cần xóa hay không.

Lúc này sẽ có 2 cách làm, một là kiểm tra từng ký tự trong chuỗi ban đầu và xóa đi nếu giống với ký tự cần xóa, và hai là kiểm tra và lấy các ký tự không giống ký tự cần xóa từ chuỗi ban đầu.

Dưới đây là hàm xóa ký tự trong chuỗi C++ thực hiện theo cách xóa ký tự thứ 2. Bạn cũng có thể tham khảo và thực hành viết cách 1 như là một bài luyện tập.


using

namespace

std

;


char

*

pop_str

(

char

* a,

char

chr,

char

* b){

int

a_cnt;

int

b_cnt =

0

;


for

( a_cnt =

0

; a[a_cnt] !=

'\0'

; ++a_cnt ) {


if

( a[a_cnt] != chr ) {

b[b_cnt] = a[a_cnt];


++b_cnt;


}


}


b[b_cnt] =

'\0'

;

return

b;

}



int

main

()

{

char

a[

50

] =

"abcdcde"

;

cout

<<

"before: "

<<a<<

endl

;


char

b[

50

];

char

chr =

'a'

;


cout

<<

"after : "

<<pop_str(a,chr,b)<<

endl

;


return

0

;

}


Kết quả:

before: abcdcde


after : bcdcde


Xóa ký tự cuối trong chuỗi C++

Để xóa ký tự cuối trong chuỗi C++, chúng ta đơn giản dịch chuyển ký tự kết thúc chuỗi \0 tiến về phía đầu chuỗi 1 đơn vị là xong.

Dưới đây là một hàm xóa chuỗi trong C++ sử dụng để xóa ký tự cuối cùng trong chuỗi.



using

namespace

std

;


char

*

pop_str_last

(

char

* str){

const

int

len =

strlen

(str);

if

( len ==

0

) {

return

NULL

;

}

else

{


str[len

-1

] =

'\0'

;

return

str;

}


}



int

main

()

{

char

a[

50

] =

"abcdcde"

;

cout

<<

"before: "

<<a<<

endl

;


cout

<<

"after : "

<<pop_str_last(a)<<

endl

;


return

0

;

}


Kết quả:

before: abcdcde


after : abcdcd


Xóa chuỗi con trong C++

Trong ngôn ngữ C++ không tồn tại hàm có sẵn nào trong thư viện chuẩn giúp chúng ta xóa chuỗi con trong C++ cả. Và tương tự ở trên thì chúng ta sẽ phải tự tạo hàm để giải quyết vấn đề này.

Ý tưởng ở đây là chúng ta tìm kiếm vị trí của chuỗi con trong chuỗi mẹ bằng hàm strstr(), sau đó tách chuỗi mẹ ra từ vị trí tìm thấy, và nối các phần này lại với nhau bằng hàm strcat().

Chúng ta cũng cần một vòng lặp để có thể tìm thấy tất cả các chuỗi con cần xóa từ chuỗi mẹ.

Dưới đây là hàm xóa chuỗi con trong C++:



using

namespace

std

;


void

pop_child_str

(

char

* str1,

char

* str2){

const

int

len =

strlen

(str2);

char

str3[

128

] =

""

;

char

*p1 = str1, *p2;



while

((p2 =

strstr

(p1,str2)) !=

NULL

) {

strncat

(str3,p1,p2 - p1);

p1 = p2 + len;


}


strcat

(str3,p1);

cout

<< str3;


}



int

main

()


{

char

str1[

128

], str2[

128

];

cout

<<

"Nhap chuoi me: "

;

cin

>> str1;

cout

<<

"Nhap chuoi con can xoa: "

;

cin

>> str2;


pop_child_str(str1,str2);



return

(

0

);

}


Kết quả:

Nhap chuoi me: abcde


Nhap chuoi con can xoa: bc


ade


Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn cách xóa chuỗi trong C++ rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về C++ trong các bài học tiếp theo