gpt4 book ai didi

c - 如果第二个参数完全包含在第一个参数中,它应该打印 true,但它打印 false

转载 作者:太空宇宙 更新时间:2023-11-04 06:51:24 26 4
gpt4 key购买 nike

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

int main(int argc, char **argv){
char *str1, *str2;
int str1len, str2len;
str1 = argv[1]; str2 = argv[2];
str1len=strlen(str1);
str2len=strlen(str2);

if (str2len>str1len){
printf("false\n");
return 0;
}
char sub1[100];
for (int i=0;i<str1len-str2len;i++){
strncpy(sub1,str1+i,str2len);
if (strcmp(sub1,str2)==0){
printf("true\n");
}
printf("false\n");
return 0;
}
}

我不知道是哪一部分是错的,它不起作用。这是一个问题:一个程序将两个文本字符串作为参数,如果第二个字符串完全包含在第一个字符串中,则打印“true”后跟换行符,否则打印“false”后跟换行符。

最佳答案

如果 str1len >= str2len,当您执行 strncpy(sub1, str1+i, str2len) 时,它不会复制空终端字符。像这样在末尾添加一个。

strncpy(sub1, str1+i, str2len);
sub1[str2len] = '\0';

此外,索引是逐一关闭的。如果你的str2刚好位于str1的末尾,它就不会被str1len-str2len捕获。相反,它应该是

str1len-str2len+1

完整的代码是:

char sub1[100];
for (int i=0; i < str1len-str2len+1; i++){
strncpy(sub1, str1+i, str2len);
sub1[str2len] = '\0';
if (strcmp(sub1,str2) == 0){
printf("true\n");
return 0;
}
}
printf("false\n");
return 0;

关于c - 如果第二个参数完全包含在第一个参数中,它应该打印 true,但它打印 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50574236/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com