Bài viết này sẽ giải thích một số phương pháp kiểm tra xem một chuỗi có chứa một chuỗi con đã cho hay không trong C
Sử dụng hàm found substring at address 0x55edd2ecc014
2 để kiểm tra xem chuỗi có chứa chuỗi con trong C không
found substring at address 0x55edd2ecc014
Hàm
found substring at address 0x55edd2ecc014
2 là một phần của tiện ích chuỗi thư viện chuẩn C và được định nghĩa trong tiêu đề found substring at address 0x55edd2ecc014
4. Hàm nhận hai đối số con trỏ found substring at address 0x55edd2ecc014
5, đối số đầu tiên biểu thị chuỗi cần tìm kiếm và đối số kia biểu thị chuỗi cần tìm kiếmNó tìm địa chỉ bắt đầu đầu tiên của chuỗi con đã cho và trả về con trỏ tương ứng cho
found substring at address 0x55edd2ecc014
5. Nếu không tìm thấy chuỗi con trong chuỗi đối số đầu tiên, con trỏ NULL được trả về#include
#include
#include
const char *tmp = "This string literal is arbitrary";
int main[int argc, char *argv[]]{
char *ret;
ret = strstr[tmp, "literal"];
if [ret]
printf["found substring at address %p\n", ret];
else
printf["no substring found!\n"];
exit[EXIT_SUCCESS];
}
đầu ra
found substring at address 0x55edd2ecc014
Sử dụng hàm found substring at address 0x55edd2ecc014
1 để kiểm tra xem chuỗi có chứa chuỗi con không
found substring at address 0x55edd2ecc014
found substring at address 0x55edd2ecc014
1 không phải là một phần của các tính năng thư viện tiêu chuẩn, nhưng nó được triển khai như một phần mở rộng trong thư viện GNU C, có thể được biểu thị bằng định nghĩa macro found substring at address 0x55edd2ecc014
3Sau khi được xác định, chúng ta có thể gọi hàm
found substring at address 0x55edd2ecc014
1 để tìm lần xuất hiện đầu tiên của chuỗi con đã cho. Tuy nhiên, xin lưu ý rằng chức năng này bỏ qua trường hợp của cả hai chuỗi#define _GNU_SOURCE
#include
#include
#include
const char *tmp = "This string literal is arbitrary";
int main[int argc, char *argv[]]{
char *ret;
ret = strcasestr[tmp, "LITERAL"];
if [ret]
printf["found substring at address %p\n", ret];
else
printf["no substring found!\n"];
exit[EXIT_SUCCESS];
}
đầu ra
found substring at address 0x55edd2ecc014
Sử dụng hàm found substring at address 0x55edd2ecc014
5 để sao chép một chuỗi con
found substring at address 0x55edd2ecc014
Ngoài ra, người ta có thể sao chép chuỗi con đã cho vào bộ đệm mới bằng hàm
found substring at address 0x55edd2ecc014
5. Nó nhận ba đối số, đối số đầu tiên là con trỏ đích found substring at address 0x55edd2ecc014
5 nơi chuỗi con đã sao chép sẽ được lưu trữĐối số thứ hai là chuỗi nguồn và đối số cuối cùng biểu thị số byte đầu tiên được sao chép nhiều nhất. Lưu ý rằng nếu không tìm thấy byte null trong byte đầu tiên của chuỗi nguồn, thì chuỗi đích sẽ không bị kết thúc null
Phần mềm này đếm số lần một chuỗi con xuất hiện trong một chuỗi sau khi nhận một chuỗi và một chuỗi con làm đầu vào. Chúng ta hãy xem xét một ví dụ
Giải pháp sẽ là
- Lấy đầu vào là một chuỗi và một chuỗi con
- Tìm chuỗi con đầu tiên trong chuỗi
- Đếm các trường hợp nó hiện diện nếu nó ở đó
Đây là mã nguồn của chương trình C để đếm số lần xuất hiện của một chuỗi con trong một chuỗi. Trên máy Linux, chương trình C được xây dựng và thực thi thành công. Cũng đưa ra dưới đây là đầu ra của ứng dụng
Thí dụ
đầu ra
found substring at address 0x55edd2ecc014
0Giải trình
- Lấy một chuỗi và một chuỗi con làm đầu vào và đặt chúng vào các trường str và sub tương ứng
- Sử dụng hàm strlen để xác định độ dài của cả hai chuỗi
- Xác định xem một chuỗi con có tồn tại hay không bằng cách sử dụng vòng lặp for. Nếu vậy, hãy sử dụng biến đếm để đếm xem nó hiện diện bao nhiêu lần
- In số lượng biến dưới dạng đầu ra
Sử dụng chức năng
đầu ra
found substring at address 0x55edd2ecc014
1Giải trình
Chúng tôi đã sử dụng phương thức strstr[] thay vì tạo vòng lặp bên trong của riêng mình để xác định xem chuỗi con có khớp từ một vị trí nhất định trong vòng lặp bên ngoài hay không. Con trỏ của ký tự khớp đầu tiên được trả về bởi phương thức strstr[]. Bộ đếm được tăng lên nếu con trỏ bằng với con trỏ cho ký tự ban đầu của vòng lặp bên ngoài. Với sự trợ giúp của phương thức strcmp[], chúng ta có thể hoàn thành mục tiêu tương tự. Hàm strchr cung cấp phiên bản đầu tiên của chuỗi cho mỗi ký tự
Hàm strrchr trả về ký tự xuất hiện lần cuối trong chuỗi. Nếu ký tự không được phát hiện, chúng sẽ trả về con trỏ NULL thay vì con trỏ ký tự. Hãy tạo một chương trình xuất ra chỉ số đầu tiên và chỉ số cuối cùng của mỗi ký tự chữ thường trong một chuỗi bằng cách sử dụng các hàm này
Một con trỏ tới ký tự nơi phát hiện sự xuất hiện của ký tự mong muốn được trả về bởi cả strchr và strrchr. Giả sử ký tự cần tìm là "b" và chuỗi cần tìm là "abcd. " Một con trỏ tới ký tự "b" trong chuỗi sau đó được trả lại. Trong trường hợp không có ký tự, NULL được trả về