C函数使用指针将字符串的最后元素与另一个元素进行比较

Jos*_*ado 4 c pointers

我的问题是看看是否str1以内容结束str2.

我试过这个:

int string_ends_with(const char *str1, const char *str2) {
    int len;
    len = strlen(str2);

    while ((*str1 == '\0' - len) && *str1 != '\0') {
        if (strcmp(str1, str2) == 0) {
            return 1;
        } else {
            return 0;
        }
    }
}

int main() {
    char str[10] = "banana";
    char str1[5] = "ana";

    string_ends_with(str, str1);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

只需使用指针即可解决此问题.

Vla*_*cow 5

while语句中的这种情况

while((*str1 == '\0' - len) && *str1 != '\0')
Run Code Online (Sandbox Code Playgroud)

没有意义.什么'\0' - len意思?

您可以通过以下方式编写函数

int string_ends_with(const char *str1, const char *str2)
{
    size_t n1 = strlen( str1 );
    size_t n2 = strlen( str2 );

    return n2 <= n1 && strcmp( str1 + n1 - n2, str2 ) == 0;
}
Run Code Online (Sandbox Code Playgroud)

如果您可能不使用标准函数,则可以按以下方式编写函数

int string_ends_with(const char *str1, const char *str2)
{
    const char *p1 = str1;
    const char *p2 = str2;

    while ( *p1 ) ++p1;
    while ( *p2 ) ++p2;

    while ( p1 != str1 && p2 != str2 && *p1 == *p2 ) --p1, --p2;

    return  p2 == str2 && *p1 == *p2;
}
Run Code Online (Sandbox Code Playgroud)