首页 > 解决方案 > 如果第二个参数完全包含在第一个参数中,它应该打印 true,但它打印 false

问题描述

#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”后跟换行符。

标签: c

解决方案


如果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;

推荐阅读