不使用内置函数的字符串搜索C程序
我的C程序有问题。这是字符串搜索程序。问题是,当我键入字符串不使用内置函数的字符串搜索C程序,c,C,我的C程序有问题。这是字符串搜索程序。问题是,当我键入字符串aabaaamaad时,当我在其中搜索ab时,结果会出现NULL,但它不应该出现,因为aabaaamaad中有ab。同样的结果也出现在am和ad上,这是正确的,但是为什么aabaaamaad会出现这种结果呢?代码: char* MyStrstr(char* pszSearchString, char* pszSearchWord); int main(int argc, char* argv[]) { char szTemp1[
aabaaamaad
时,当我在其中搜索ab
时,结果会出现NULL
,但它不应该出现,因为aabaaamaad
中有ab
。同样的结果也出现在am
和ad
上,这是正确的,但是为什么aabaaamaad
会出现这种结果呢?代码:
char* MyStrstr(char* pszSearchString, char* pszSearchWord);
int main(int argc, char* argv[])
{
char szTemp1[20] = {0};
char szTemp2[10] = {0};
char * pszTemp1 = NULL;
strcpy(szTemp1, "aabaaacaamaad");
strcpy(szTemp2, "aa");
pszTemp1 = MyStrstr(szTemp1, szTemp2);
printf("%s", pszTemp1);
getch();
return 0;
}
char* MyStrstr(char* pszSearchString, char* pszSearchWord)
{
int nFcount = 0;
int nScount = 0;
int nSearchLen = 0;
int nIndex = 0;
char* pszDelString = NULL;
if(pszSearchString == NULL || pszSearchWord == NULL) {
return NULL;
}
while(pszSearchWord[nSearchLen] != '\0') {
nSearchLen++;
}
if(nSearchLen <= 0){
return pszSearchString;
}
for(nFcount = 0; pszSearchString[nFcount] != '\0'; nFcount++) {
if(pszSearchString[nFcount] == pszSearchWord[nScount]) {
nScount++;
} else {
nScount = 0;
}
if(nScount == nSearchLen) {
nIndex = (nFcount - nScount) + 1;
pszDelString = pszSearchString + nIndex;
return pszDelString;
}
}
return NULL;
}
char*mystrstrstr(char*pszSearchString,char*pszSearchWord);
int main(int argc,char*argv[])
{
char szTemp1[20]={0};
char szTemp2[10]={0};
char*pszTemp1=NULL;
strcpy(szTemp1,“aabaaamaad”);
strcpy(szTemp2,“aa”);
pszTemp1=mystrstrstr(szTemp1,szTemp2);
printf(“%s”,pszTemp1);
getch();
返回0;
}
char*MyStrstr(char*pszSearchString,char*pszSearchWord)
{
int nFcount=0;
int nScount=0;
int nSearchLen=0;
int-nIndex=0;
char*pszDelString=NULL;
if(pszSearchString==NULL | | pszSearchWord==NULL){
返回NULL;
}
while(pszSearchWord[nSearchLen]!='\0'){
nSearchLen++;
}
如果(nSearchLen我知道你的代码试图做什么,你想避免循环中的循环,但你错过了一件事。当匹配失败时,你不会后退,而是继续在pszSearchString
中前进,而你不应该。此缺陷的结果是,如果匹配不完整,你会跳过字符。这就是strstr函数最初在循环中使用一个循环,因此对于pszSearchString
中的每个字符,都有一个新的循环与pszSearchWord
匹配。下面是来自BSD/Darwin的原始strstr.c文件:
char * strstr(const char *in, const char *str)
{
char c;
size_t len;
c = *str++;
if (!c)
return (char *) in; // Trivial empty string case
len = strlen(str);
do {
char sc;
do {
sc = *in++;
if (!sc)
return (char *) 0;
} while (sc != c);
} while (strncmp(in, str, len) != 0);
return (char *) (in - 1);
}
请阅读,您可以尝试添加一些调试printf,并检查返回的确切位置为NULL。我知道返回NULL的原因。在我在程序中键入的字符串中,“aab”和“aad”有异常。这些是程序出错的地方。我不知道如何处理这些地方。此答案与命令提示符不兼容。我还想使用命令提示符,如何更改命令提示符的代码?请给我一个建议。关于…您可以复制粘贴主函数旁边的代码并从那里调用。传递argv[1]和argv[2](从命令行传递参数1和2)然后你唯一需要做的就是比较指针,打印并返回正确的值。