Thứ Tư, 28 Tháng Chín 2022
Trang chủLập trìnhLập trình C/C++Cắt chuỗi trong C và C++ - Hàm có sẵn và tự...

Cắt chuỗi trong C và C++ – Hàm có sẵn và tự viết hàm

Cắt chuỗi là một bài tập cơ bản khi ta học lập trình, cắt chuỗi tức là từ một chuỗi cha ban đầu ta sẽ cắt ra một chuỗi con từ vị trí x tới y từ chuỗi cha đó. Cắt chuỗi là một bài tập mà sau này khi làm thực tế chúng ta cũng sẽ gặp một số vấn đề tương tự.

Vậy làm thế nào để cắt chuỗi cùng mình tìm hiểu trong bài viết này nhé.

Cắt chuỗi trong C

Hàm có sẵn

Trong C để cắt chuỗi ta có thể sử dụng hàm là strncpy.

Cú pháp

strncpy(chuỗi coppy, chuỗi nguồn + (x), m);

Với x ở đây là vị trí bắt đầu, m là số ký tự cắt ra tính từ vị trí x.

Về bản chất thì hàm này là một hàm coppy m ký tự tự chuỗi nguồn tới chuỗi đích. Như vậy ta hoàn toàn có thể áp ụng hàm này để cắt chuỗi.

Ta có ví dụ minh họa như sau:

Bây giờ mình có chuỗi là abcdefghiklm, vậy mình muốn cắt ra 5 ký tự tính từ vị trí số 4(từ ký tự d) mình sẽ viết code như sau:


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

int main() {
    char str[] = "abcdefghiklm";
    char t[64]; 

    strncpy( t, str+3, 5 ); //trong Code vị trí bắt đầu tính từ 0 nên cắt từ vị trí số 4  ta sẽ truyền vào là 3

    t[5] = '\0'; /*Chuỗi là một mảng ký tự liên tiếp và kết thúc chuỗi là một ký tự 
      rỗng, khi khai báo có thể ký tự thứ t[5]mang giá trị rác và nó là một ký tự thì lúc đó chuỗi mới
sẽ tính cả ký tự đó...vì thế ta nên gắn ký tự tại vị trí này là rỗng*/

    printf("%s", t);
}

Và đây là kết quả khi chạy chương trình

defgh

Tự viết hàm cắt chuỗi

Và ta cũng có thể tự viết lại một hàm cắt chuỗi như sau

char *catchuoi(char a[], int x, int y){
	char *temp =  (char *)malloc(100 * sizeof(char));
	for(int i = x;i<=y;i++){
		temp[i-x] = a[i];
	}

	return temp;
}

Hàm này có tác dụng là cắt chuỗi a, từ vị trí x tới vị trí y.

Ví dụ bây giờ mình sẽ cắt chuỗi abcdefghiklm từ vị trí 4 tới vị trí số 8.

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

char *catchuoi(char a[], int x, int y){
	char *temp =  (char *)malloc(100 * sizeof(char));
	for(int i = x;i<=y;i++){
		temp[i-x] = a[i];
	}

	return temp;
}
int main() {
    char* a = "abcdefghiklm";
    char *b; 

    b = catchuoi(a, 3, 7);//Chuỗi bắt đầu từ vị trí 0, nên để cắt chuỗi vị trí 4-8 ta sẽ truyền vào 3-7 

    printf("%s", b);
}

Kết quả khi chạy chương trình

defgh

Cắt chuỗi trong C++

Trong C++ chuỗi ta sẽ sử dụng lớp string.

Và để cắt chuỗi trong lớp string ta có phương thức là substr.

Cú pháp

string substr(int vi_tri_bat_dau_cat, int so_ky_tu);

Vẫn tiếp với ví dụ bên trên ta viết code C++ như sau:

#include <iostream>
#include <cstring>
using namespace std;


int main() {
    string a = "abcdefghiklm";
    string b;
    
    b = a.substr(3,5);
    
    cout<<b;
}

Kết quả khi chạy chương trình

Cảm ơn bạn đã đọc bài viết! Chúc bạn học tốt!

XEM THÊM
Hướng dẫn chia và gộp phân vùng ổ cứng trên Windows
Kiếm tiền Accesstrade, kiếm tiền tại nhà với Accesstrade.vn – Tiếp thị liên kết
Top 4 App kiếm tiền online trên điện thoại tốt nhất 2022
1000 lượt truy cập website kiếm được bao nhiêu tiền từ Google Adsense
0 0 Phiếu bình chọn
Xếp hạng bài viết
BÀI VIẾT LIÊN QUAN
Đăng ký nhận thông báo
Thông báo email khi
guest
0 Bình luận
Không thể gửi email
Phản hồi nội tuyến

NÊN ĐỌC THÊM

Bạn muốn tìm kiếm gì?


0
Giáo sư! có thể ném gạch bên dưới nhé!x
()
x