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.
Tóm Tắt
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