首页 > 解决方案 > 子字符串存在于C中的字符串中

问题描述

#include <stdio.h>
#include <string.h>

int main()
{
    char str1[80] = "downtown", str2[20] = "town";
    
    int len1 = 0, len2 = 0, i, j, count;

    len1 = strlen(str1);
    len2 = strlen(str2);

    for (i = 0; i <= len1 - len2; i++) { 
        for (j = i; j < i + len2; j++) {
            count = 1;
            if (str1[j] != str2[j - i]) {
                count = 0;
                break;
            }
        }
        if (count == 1) {
            break;
        }
    }
    if (count == 1) {
        printf("True");
    } else {
        printf("False");
    }
}

在上面的代码中,我试图在不使用字符串函数的情况下解决这个问题,除了strlen()可以用一个简单的while循环替换。是否有任何其他检查连续字符的方法,例如首先检查字符是否在字符串中,以及i索引是否在下一个位置而不是在字符串中随机。

标签: cstringfunction

解决方案


这是使用函数的一种非常简洁的方法。它假定strsub都是正确的 C 字符串,并返回指向第一个匹配项和NULL不匹配项的指针。

char *substr(const char *str, const char *sub) {
    if (!*sub)
        return str; // Empty string is substring of all strings

    while (*str) {
        const char *sub1 = sub;
        const char *str1 = str;
        while (*str1++ == *sub1++) {
            if (!*sub1)
                return (char *)str;
        }
        str++;
    }
    return NULL;
}

此函数与标准函数相同strstr(),存在于 C 标准库中并在<string.h>.


推荐阅读