读书人

在字符串中查寻子字符串

发布时间: 2012-09-29 10:30:01 作者: rapoo

在字符串中查找子字符串。
怎样用C语言实现在字符串中查找子字符串的位置,如果找不到则返回NULL.

[解决办法]
//供lz参考

C/C++ code
char * maxString(char const * src1,char const * src2) {       int i,j;    int index = 0,lastindex = 0,len = 0,lastlen = 0;    char * laststr = (char *)malloc(20);    for (i=0; src1[i] != '\0'; i++)    {        for (j=0; src2[j] != '\0'; j++)        {            if (src1[i+len] == src2[j])            {                if(!len)                 {                    index = j;                }                len++;            }             else            {                if (len)                {                    if(lastlen < len)                    {                        lastlen = len;                        lastindex = index;                    }                    len = 0;                    j = index;                }            }        }    }    len = 0;    while(lastlen--)    {        laststr[len++] = src2[lastindex++];    }    laststr[len] = '\0';    return laststr;}
[解决办法]
用 strstr 不就行了吗。
[解决办法]
C语言中本身就有一个库函数strstr帮你解决这个问题啊

原型:extern char *strstr(char *haystack, char *needle);

用法:#include <string.h>

功能:从字符串haystack中寻找needle第一次出现的位置(不比较结束符NULL)。

说明:返回指向第一次出现needle位置的指针,如果没找到则返回NULL。

C/C++ code
      // strstr.c            #include <syslib.h>      #include <string.h>      main()      {        char *s="Golden Global View";        char *l="lob";        char *p;                clrscr();                p=strstr(s,l);        if(p)          printf("%s",p);        else          printf("Not Found!");        getchar();        return 0;      }
[解决办法]
有库函数 strstr哈
直接拿来用就行了
[解决办法]
探讨

用 strstr 不就行了吗。

[解决办法]
C/C++ code
#include <stdio.h> 

char * maxString(char const * src1,char const * src2);

int main()
{
char a[100],b[100]="abcdefg",c[100]="abc";
char *p=a;
p=maxString(b,c);
printf("%s\n",p);
system("pause");
return 0;
}
/*整体来说就是src2中从开始每一位和src1中的每个字符比较有相同len++,继续下一位的比较,一旦没有执行else*/
char* maxString(char const * src1,char const * src2)
{
int i,j;
int index = 0,lastindex = 0,len = 0,lastlen = 0;
char *laststr = (char *)malloc(20);
for (i=0; src1[i] != '\0'; i++)
{
for (j=0; src2[j] != '\0'; j++)
{
if (src1[i+len] == src2[j])//如果说j中有字符和src1[i+len]相等
{
if(!len)
{
index = j;//len等于0,index值等于j(len等于0的情况的处理)
}
len++;//计数器加一
}
else//一直到src2中j位置和src1中不相等
{
if (len)//len计数器有值,表示src2中有多少个字母和src1相同
{
if(lastlen < len)
{
lastlen = len;
lastindex = index;


}
len = 0;
j = index;
}
}
}
}
len = 0;
while(lastlen--)
{
laststr[len++] = src2[lastindex++];
}
laststr[len] = '\0';
return laststr;
}


[解决办法]
很简单 用strstr()就OK了
[解决办法]
用strstr
顺便复习一下所有str*函数:
strcpy
strcat
strcmp
strlen
strcpy
strcat
strcmp
strlen
strchr
strcoll
strcspn
strerror
strncat
strncmp
strncpy
strpbrk
strrchr
strspn
strstr
strtok
strxfrm
strcmpi
stricmp
strdup
strlwr
strnicmp
strnset
strrev
strset
strupr

[解决办法]
strtok
strxfrm
strcmpi
stricmp
strdup
strlwr
strnicmp
strnset
strrev
strset
strupr
没接触过
[解决办法]
有现成的strstr,不要再造轮子了..
[解决办法]
char *strstr(char *haystack, char *needle);
[解决办法]
strcpy
strcat
strcmp
strlen
strcpy
strcat
strcmp
strlen
strchr
strcoll
strcspn
strerror
strncat
strncmp
strncpy
strpbrk
strrchr
strspn
strstr
strtok
strxfrm
strcmpi
stricmp
strdup
strlwr
strnicmp
strnset
strrev
strset
strupr
[解决办法]
floor 8 就是牛逼
[解决办法]
/* STRSTR.C */

#include <string.h>
#include <stdio.h>

char str[] = "lazy";
char string[] = "The quick brown dog jumps over the lazy fox";
char fmt1[] = " 1 2 3 4 5";
char fmt2[] = "12345678901234567890123456789012345678901234567890";

void main( void )
{
char *pdest;
int result;
printf( "String to be searched:\n\t%s\n", string );
printf( "\t%s\n\t%s\n\n", fmt1, fmt2 );
pdest = strstr( string, str );
result = pdest - string + 1;
if( pdest != NULL )
printf( "%s found at position %d\n\n", str, result );
else
printf( "%s not found\n", str );
}

读书人网 >C语言

热点推荐