Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果第二个参数完全包含在第一个参数中,则应打印为true,但打印为false #包括 #包括 int main(int argc,字符**argv){ 字符*str1,*str2; int str1len,str2len; str1=argv[1];str2=argv[2]; str1len=strlen(str1); str2len=strlen(str2); 如果(str2len>str1len){ printf(“假”); 返回0; } char sub1[100]; 对于(int i=0;i_C - Fatal编程技术网

如果第二个参数完全包含在第一个参数中,则应打印为true,但打印为false #包括 #包括 int main(int argc,字符**argv){ 字符*str1,*str2; int str1len,str2len; str1=argv[1];str2=argv[2]; str1len=strlen(str1); str2len=strlen(str2); 如果(str2len>str1len){ printf(“假”); 返回0; } char sub1[100]; 对于(int i=0;i

如果第二个参数完全包含在第一个参数中,则应打印为true,但打印为false #包括 #包括 int main(int argc,字符**argv){ 字符*str1,*str2; int str1len,str2len; str1=argv[1];str2=argv[2]; str1len=strlen(str1); str2len=strlen(str2); 如果(str2len>str1len){ printf(“假”); 返回0; } char sub1[100]; 对于(int i=0;i,c,C,如果str1len>=str2len,当您执行strncpy(sub1,str1+i,str2len)时,它不会在空终端字符上进行复制。因此,在末尾添加一个 #include <stdio.h> #include <string.h> int main(int argc, char **argv){ char *str1, *str2; int str1len, str2len; str1 = argv[1]; str2 = argv[2]; str1

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

#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;
  }
}
此外,索引关闭1。如果您的
str2
恰好位于
str1
的末尾,它将不会被
str1len-str2len
捕获。相反,它应该是

strncpy(sub1, str1+i, str2len);
sub1[str2len] = '\0';
完成的代码为:

str1len-str2len+1
charsub1[100];
对于(int i=0;i
如果
str1len
>=
str2len
,当您执行
strncpy(sub1,str1+i,str2len)
时,它不会在空终端字符上进行复制。请在末尾添加一个字符

#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;
  }
}
此外,索引关闭1。如果您的
str2
恰好位于
str1
的末尾,它将不会被
str1len-str2len
捕获。相反,它应该是

strncpy(sub1, str1+i, str2len);
sub1[str2len] = '\0';
完成的代码为:

str1len-str2len+1
charsub1[100];
对于(int i=0;i
您可以通过使用C string.h函数strstr()实现所需的功能。它在“haystack”字符串str(haystack,pinder)中搜索“pinder”字符串.它返回一个指针,指向干草堆中针的起始位置。如果找不到针,则返回一个空指针。通过测试基本上可以实现您想要的

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;
我认为您代码中的问题在于
printf(“false\n”);return 0;
过早退出了您的函数。您没有测试str2的所有可能的起始位置。请尝试以下操作

if(strstr(argv[1],argv[2]) == NULL){
  printf("false\n");
} else {
  printf("true\n");
}

for(int i=0;i您可以通过使用C string.h函数strstrstr()来实现所需的功能。它在“haystack”字符串str(haystack,pinder)中搜索“pinder”字符串.它返回一个指针,指向干草堆中针的起始位置。如果找不到针,则返回一个空指针。通过测试基本上可以实现您想要的

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;
我认为您代码中的问题在于
printf(“false\n”);return 0;
过早退出了您的函数。您没有测试str2的所有可能的起始位置。请尝试以下操作

if(strstr(argv[1],argv[2]) == NULL){
  printf("false\n");
} else {
  printf("true\n");
}

对于(int i=0;i两个问题,您没有添加0个字符,循环太短。修复了示例:

for (int i=0;i<str1len-str2len;i++){
  strncpy(sub1,str1+i,str2len);
  if(strcmp(sub1,str2) == 0){
    printf("true\n");
    return 0;
  } 
}
printf("false\n");
return 0;
#包括
#包括
int main(int argc,字符**argv){
字符*str1,*str2;
int str1len,str2len;
str1=argv[1];str2=argv[2];
str1len=strlen(str1);
str2len=strlen(str2);
如果(str2len>str1len){
printf(“假”);
返回0;
}
char sub1[100];
int i=0;
对于(;i<(str1len-str2len)+1;i++){
strncpy(sub1,str1+i,str2len);
sub1[str2len]='\0';
if(strcmp(sub1,str2)==0){
printf(“true\n”);
返回0;
}
}
printf(“假”);
返回0;
}

两个问题,您没有添加0个字符,循环太短。修复了示例:

for (int i=0;i<str1len-str2len;i++){
  strncpy(sub1,str1+i,str2len);
  if(strcmp(sub1,str2) == 0){
    printf("true\n");
    return 0;
  } 
}
printf("false\n");
return 0;
#包括
#包括
int main(int argc,字符**argv){
字符*str1,*str2;
int str1len,str2len;
str1=argv[1];str2=argv[2];
str1len=strlen(str1);
str2len=strlen(str2);
如果(str2len>str1len){
printf(“假”);
返回0;
}
char sub1[100];
int i=0;
对于(;i<(str1len-str2len)+1;i++){
strncpy(sub1,str1+i,str2len);
sub1[str2len]='\0';
if(strcmp(sub1,str2)==0){
printf(“true\n”);
返回0;
}
}
printf(“假”);
返回0;
}

使用打印帮助调试代码,或者使用调试器进行类似的打印。这是我提出的代码

#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];

  int i = 0;
  for (;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;
}
(Hmmm:我在一个不同的目录下运行了这个程序,我通常在那里处理堆栈溢出问题,
makefile
中的编译选项甚至比我通常显示的更严格。)

请注意,复制“n”比较代码所做的工作比严格必要的要多得多;
strstr()
解决方案更为合理。您可以重新编写循环以避免复制,并使用
strncmp()
——这与
strstr()
类似

$ gcc -m64 -g -O3 -std=c11 -pedantic -Wall -Wextra -Werror -Wshadow \
>     -Wmissing-prototypes -Wpointer-arith  -Wold-style-definition \
>     -Wcast-qual -Wstrict-prototypes subs61.c -o subs61
$ subs61 'I am the Walrus' 'I am the Walrus'
str1 (15): [I am the Walrus]
str2 (15): [I am the Walrus]
strstr() says 'true'
Compare [I am the Walrus] with [I am the Walrus]
true
$ subs61 'He said, "I am the Walrus", but did you believe him?' 'I am the Walrus'
'subs61' is up to date.
str1 (52): [He said, "I am the Walrus", but did you believe him?]
str2 (15): [I am the Walrus]
strstr() says 'true'
Compare [He said, "I am ] with [I am the Walrus]
Compare [e said, "I am t] with [I am the Walrus]
Compare [ said, "I am th] with [I am the Walrus]
Compare [said, "I am the] with [I am the Walrus]
Compare [aid, "I am the ] with [I am the Walrus]
Compare [id, "I am the W] with [I am the Walrus]
Compare [d, "I am the Wa] with [I am the Walrus]
Compare [, "I am the Wal] with [I am the Walrus]
Compare [ "I am the Walr] with [I am the Walrus]
Compare ["I am the Walru] with [I am the Walrus]
Compare [I am the Walrus] with [I am the Walrus]
true
$
printf(“使用strncmp():\n”);
int=0;

对于(inti=0;i使用打印帮助调试代码,或者使用调试器进行类似的打印。这就是我提出的代码

#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];

  int i = 0;
  for (;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;
}
(Hmmm:我在一个不同的目录下运行了这个程序,我通常在那里处理堆栈溢出问题,
makefile
中的编译选项甚至比我通常显示的更严格。)

请注意,复制“n”比较代码所做的工作比严格必要的要多得多;
strstr()
解决方案更为合理。您可以重新编写循环以避免复制,并使用
strncmp()
——这与
strstr()
类似

$ gcc -m64 -g -O3 -std=c11 -pedantic -Wall -Wextra -Werror -Wshadow \
>     -Wmissing-prototypes -Wpointer-arith  -Wold-style-definition \
>     -Wcast-qual -Wstrict-prototypes subs61.c -o subs61
$ subs61 'I am the Walrus' 'I am the Walrus'
str1 (15): [I am the Walrus]
str2 (15): [I am the Walrus]
strstr() says 'true'
Compare [I am the Walrus] with [I am the Walrus]
true
$ subs61 'He said, "I am the Walrus", but did you believe him?' 'I am the Walrus'
'subs61' is up to date.
str1 (52): [He said, "I am the Walrus", but did you believe him?]
str2 (15): [I am the Walrus]
strstr() says 'true'
Compare [He said, "I am ] with [I am the Walrus]
Compare [e said, "I am t] with [I am the Walrus]
Compare [ said, "I am th] with [I am the Walrus]
Compare [said, "I am the] with [I am the Walrus]
Compare [aid, "I am the ] with [I am the Walrus]
Compare [id, "I am the W] with [I am the Walrus]
Compare [d, "I am the Wa] with [I am the Walrus]
Compare [, "I am the Wal] with [I am the Walrus]
Compare [ "I am the Walr] with [I am the Walrus]
Compare ["I am the Walru] with [I am the Walrus]
Compare [I am the Walrus] with [I am the Walrus]
true
$
printf(“使用strncmp():\n”);
int=0;

对于(int i=0;i如何连接前后的空格?将
“pre”
视为
“pre”
。一种方法可以是:在搜索字符串的开头和结尾添加空格(
“this is pretty”
“this is pretty”
)和单词(
“pre”
“pre”
)。然后简单地做一个strcmp。@CompuChip我编辑了这个问题,所以显然我的代码只适用于某些情况。例如,它不适用于“I am th”