Tìm chuỗi con trong chuỗi C++

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

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ếm

Nó 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
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
3

Sau 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

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
0

Giả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
1

Giả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ề

strstr() trong c là gì?

Hàm strstr() trả về một con trỏ tới điểm bắt đầu xuất hiện đầu tiên của chuỗi 2 trong chuỗi 1 . Nếu string2 không xuất hiện trong string1, hàm strstr() trả về NULL. Nếu string2 trỏ đến một chuỗi có độ dài bằng 0, hàm strstr() trả về chuỗi1.

Có chức năng chuỗi con trong c không?

Hóa ra là, trong C, thực sự không thể viết một hàm chuỗi con "tiện ích" thích hợp , điều đó không làm được . Tất cả những điều này là hệ quả của việc C không có kiểu chuỗi cấp một.

Strnstr trong c là gì?

Hàm strnstr xác định vị trí xuất hiện đầu tiên của chuỗi kết thúc null \c little trong chuỗi \c big, trong đó không quá \c len ký tự được tìm kiếm. Characters that appear after a \0 character are not searched.