不使用内置函数的字符串搜索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[

我的C程序有问题。这是字符串搜索程序。问题是,当我键入字符串
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)然后你唯一需要做的就是比较指针,打印并返回正确的值。