Tìm chuỗi con trong 1 chuỗi

Yêu cầu: Tìm chuỗi con trong 1 chuỗi khác.

  • Nếu tìm thấy trả về vị trí xuất hiện đầu tiền của chuỗi con trong “chuỗi cha”.
  • Nếu không tìm thấy trả về -1

Thuật toán:

B1: Lần lượt so sánh chuỗi con cần tìm với N kí tự của chuỗi cha (N = chiều dài chuỗi con cần tìm kiếm, dùng hàm strncmp())

B2. Nếu không tìm thấy, dịch con trỏ tới phần tử tiếp theo của chuỗi cha. Quay lại bước 1.

B3. Nếu tìm thấy trả về vị trí xuất hiện của chuỗi con trong chuỗi cha.

Hoặc các bạn có thể sử dụng hàm có sẵn: strstr()

/************************Find sub-string**********************
* Author: vncoding
* Date : 11/01/2016
***************************************************************/
#include "stdio.h"
#include "conio.h"
#include "string.h"


int findsubstr(const char *str, char *sub);

void main()
{
    char str[] = "vncoding.net blog for developer";
    char sub1[] = "blog";
    char sub2[] = "dev";
    char sub3[] = "blog for developer";
    char sub4[] = ".";
    printf("str = '%s'\n", str);
    printf("'%s' at %d\n", sub1, findsubstr(str, sub1));
    printf("'%s' at %d\n", sub2, findsubstr(str, sub2));
    printf("'%s' at %d\n", sub3, findsubstr(str, sub3));
    printf("'%s' at %d\n", sub4, findsubstr(str, sub4));
    getch();
}

/************************************************
Find sub-string in string
Return: -1 if not found
 x (starting point in string) if found
*************************************************/
int findsubstr(const char *str, char *sub)
{
    const char *p = str;
    int len = strlen(sub);
    while(*p != NULL)
    {
        if (strlen(p) >= len)
        {
            if (strncmp(p, sub, strlen(sub)) == 0)
            {
                return (p - str);
            }
        }
        else
        {
            break;
        }
        p++;
    }
    return -1;
}

Kết quả:

Tìm kiếm chuỗi con trong 1 chuỗi
Tìm kiếm chuỗi con trong 1 chuỗi

Be the first to comment

Leave a Reply

Your email address will not be published.

*