Xóa chuỗi trong C | Laptrinhcanban.com

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.

#include<stdio.h>

char* pop_str(char* a, char chr, char* b){
int a_cnt;
int b_cnt = 0;
/* So sánh từng ký tự trong chuỗi a với ký tự c*/
for ( a_cnt = 0; a[a_cnt] != '\0'; ++a_cnt ) {
/* Nếu ký tự khác c thì lấy ra và thêm vào kết quả */
if ( a[a_cnt] != chr ) {
b[b_cnt] = a[a_cnt];
++b_cnt;
}
}
b[b_cnt] = '\0'; /* Gán ký tự kết thúc chuỗi '\0' */
return b;
}

int main(void){
char a[50] = "abcdcde"; /* Chuỗi ban đầu*/
puts(a);

char b[50]; /* Chuỗi kết quả*/
char chr = 'c'; /* Ký tự cần xóa*/

puts(pop_str(a,chr,b));

return 0;
}

Kết quả:

abcdcde
abdde

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.

#include<stdio.h>
#include <string.h>// for strlen

char* pop_str_last(char* str){
const int len = strlen(str);
if( len == 0 ) {
return '\0'; // Nếu chuỗi ban đầu là Null thì trả về '\0'
} else {
/* Dịch chuyển ký tự kết thúc chuỗi để xóa ký tự cuối cùng*/
str[len-1] = '\0';
return str;// Trả về chuỗi kết quả
}
}

int main(void){
char a[50] = "abcdcde";
puts(a);
puts(pop_str_last(a));

return 0;
}

Kết quả:

abcdcde
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:

#include <stdio.h>
#include <string.h>

char* pop_child_str(char* str1,char* str2){
const int len = strlen(str2);
char str3[128] = "";
char *p1 = str1, *p2;

/* Tạo vòng lặp để xóa hết chuỗi con */
while((p2 = strstr(p1,str2)) != NULL) { /*Tìm vị trí chuỗi con bằng hàm strstr*/
strncat(str3,p1,p2 - p1); /* Nối các phần không chứa chuỗi con */
p1 = p2 + len; /* Dịch chuyển con trỏ sang vị trí tìm kiếm tiếp theo */
}
strcat(str3,p1);
printf("%s\n",str3);

}

int main(void)
{
char str1[128], str2[128];
printf("Nhap chuoi me: ");
scanf("%s",str1);
printf("Nhap chuoi con can xoa: ");
scanf("%s",str2);

pop_child_str(str1,str2);

return(0);
}

Kết quả:

Nhap chuoi me: abcdebc
Nhap chuoi con can xoa: bc
ad

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

HOME>> >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.