首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

在字符串中查寻子字符串

2012-09-29 
在字符串中查找子字符串。怎样用C语言实现在字符串中查找子字符串的位置,如果找不到则返回NULL.[解决办法]/

在字符串中查找子字符串。
怎样用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 );
}

热点排行