我的问题是看看是否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)
我做错了什么?
只需使用指针即可解决此问题.
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)