C语言:字符串子串判断

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/YangZuo_Chester/article/details/78046714

突然想起小学期里字符串子串判断的题目,之前的写法是用循环匹配,总感觉写法欠妥

试着用递归写了一次子串匹配,就当换个思路吧

运行图:
这里写图片描述

代码:

#include<stdio.h>

void judge_strings(char* string,char* subString,int p_string,int p_subString,int &result)
{//每次对当前位置的string和subString进行字符匹配,如果相同就继续循环,不同就退出
    if (subString[p_subString] == '\0')
    {
        result = 1;
        return;
    }
    if (string[p_string] == subString[p_subString])
    {
        judge_strings(string, subString, p_string + 1, p_subString + 1,result);
    }
}
int main()
{
    char string[100];   //存储较长的字符串
    char subString[20]; //存储子串用来判断
    int i_string = 0;   //长字符串的计数变量
    int i_subString = 0;//子串的计数变量
    int result = 0;     //匹配结果

    puts("\tInput a long string:");
    scanf("%s", string);
    puts("\tInput a short one:");
    scanf("%s", subString);
    while (string[i_string] != '\0')//长字符串循环
    {
        if (string[i_string] == subString[i_subString])//i_subString确认相等的时候应该等于0
        {
            judge_strings(string, subString,i_string,i_subString,result);
            if (result == 1)
                break;
        }
        ++i_string;
        i_subString = 0;//保证每次循环subString的计数变量一直为0
    }
    //输出结果
    if (result == 1)
    {
        printf("[%s] IS a substring of [%s].\n", subString,string );
    }
    else
    {
        printf("[%s] is NOT a substring of [%s].\n",subString,string);
    }
    getchar();
    getchar();
    return 0;
}

猜你喜欢

转载自blog.csdn.net/YangZuo_Chester/article/details/78046714