【发布时间】:2011-02-07 03:24:12
【问题描述】:
我需要编写一个程序,它接受两个字符串作为参数,并检查第二个字符串是否是第一个字符串的子字符串。我需要在不使用任何特殊库函数的情况下做到这一点。我创建了这个实现,但我认为只要两个字符串中有一个相同的字母,它就会始终返回 true。你能帮我吗?我不确定我做错了什么:
#include <stdio.h>
#include <string.h>
int my_strstr( char const *s, char const *sub ) {
char const *ret = sub;
int r = 0;
while ( ret = strchr( ret, *sub ) ) {
if ( strcmp( ++ret, sub+1 ) == 0 ){
r = 1;
}
else{
r = 0;
}
}
return r;
}
int main(int argc, char **argv){
if (argc != 3) {
printf ("Usage: check <string one> <string two>\n");
}
int result = my_strstr(argv[1], argv[2]);
if(result == 1){
printf("%s is a substring of %s\n", argv[2], argv[1]);
} else{
printf("%s is not a substring of %s\n", argv[2], argv[1]);
}
return 0;
}
【问题讨论】:
-
如果您“需要在不使用任何特殊库函数的情况下执行此操作”,则不应使用 strchr 和 strcmp。实际上 strcmp 就是你的问题所在。
-
@stmax:这些只是普通库函数。他们没有什么特别的:)
-
@Daniel:如果
strchr()和strcmp()是普通的,那么strstr()也是... -
@Jonathan Leffler:当然。我确实指出,实际上没有“特殊”库函数——只是库函数,句号。