// 设计函数，接收两个字符串，判断第二个字符串是否为第一个字符串的子符串。
// 【提示】第二个字符串的内容全部在第一个字符串中
#include <stdio.h>

int is_substring(char *str1, char *str2);

int main(void)
{
    char *str1 = "hello world";
    char *str2 = "wdorld";
    int result = is_substring(str1, str2);
    char *res = result ? "是" : "不是";
    printf("\"%s\" %s \"%s\" 的子串", str2, res, str1);
    return 0;
}

int is_substring(char *str1, char *str2)
{
    // 从第一个字符串的第一个字符开始，依次和第二个字符串的第一个字符比较
    // 如果相同，则比较第一个字符串的第二个字符和第二个字符串的第二个字符
    // 如果不同，则比较第一个字符串的第二个字符和第二个字符串的第一个字符
    if (!*str1 || !*str2) // 如果第一个字符串或第二个字符串为空字符串，则返回 0
        return 0;
    while (*str1) // 当第一个字符串不为空字符串时
    {
        // 使用临时指针变量，避免修改原始指针变量的值，下一轮还需要重新回归 str2 的起始位置
        char *p1 = str1;   // 保存第一个字符串的地址
        char *p2 = str2;   // 保存第二个字符串的地址
        while (*p1 && *p2) // 当第一个字符串和第二个字符串都不为空字符串时
        {
            if (*p1 != *p2) // 如果第一个字符串和第二个字符串的字符不相同
                break;      // 退出内层循环，接下来判断第二个字符串是否结束，如果结束，则表示第二个字符串是第一个字符串的子串
            p1++;           // 第一个字符串的指针向后移动一个字节
            p2++;           // 第二个字符串的指针向后移动一个字节
        }
        if (!*p2) // 如果第二个字符串为空字符串，表示第二个字符串是第一个字符串的子串
            return 1;
        str1++; // 第一个字符串的指针向后移动一个字节，下一次 str2 从地址开始位置从新开始比较，str1 从当前比较位置的下一位开始比较
    }
}