标题:C++这题怎么做?求教......
只看楼主
clq501
Rank: 1
等 级:新手上路
帖 子:5
专家分:5
注 册:2012-11-26
结帖率:0
已结贴  问题点数:20 回复次数:5 
C++这题怎么做?求教......
1、    编写一个函数,实现子串查找功能。要求返回:(1)第一个匹配的子串在目标串中的位置;(2)指向第一个匹配子串首字符的指针。
(1)、定义该函数原型。
(2)、实现该函数。
搜索更多相关主题的帖子: 目标 
2012-12-06 10:11
mmmmmmmmmmmm
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:8
帖 子:388
专家分:1809
注 册:2012-11-2
得分:20 
献丑了 自己试着写了下strstr 求各位大大给指导一下 谢谢

刚刚看了下strstr的源码 发现我写的太白菜了 不管 还是发上来了 呵呵
程序代码:
#include<iostream>
using namespace std;

char * strstr_(const char * src, const char * dest);

int main(void)
{
    const char src[]  = "this is a test";
    const char dest[] = "test";
    char *s = strstr_(src,dest);
    cout<<s<<endl;
//    delete s;   //这里为什么会报错呢 求解答
    return 0;
}
char * strstr_(const char * src, const char * dest)
{
    char * s1 = new char;
    char * s2 = new char;
    strcpy(s1,src);
    strcpy(s2,dest);
    if (s1==NULL || s2==NULL)
    {
        return NULL;
    }
    else if (strlen(s2) > strlen(s1))
    {
        return NULL;
    }
    else if (strlen(s2) == strlen(s1))
    {
        return s1;
    }
    else
    {
        int len=strlen(s1)-strlen(s2)+1;
        for (int i=0; i<len; ++i)
        {
            
            if (*s1 == *s2)
            {
                int j=0;
                for (; j<strlen(s2); ++j)
                {
                    if (*(s1+j) != *(s2+j))
                    {
                        break;
                    }
                }
                if (j == strlen(s2))
                {
                    return s1;
                }
            }
            s1+=1;    
        }
        return NULL;
    }
}

我们的目标只有一个:消灭0回复!
while(1)
++money;
2012-12-06 12:02
mmmmmmmmmmmm
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:8
帖 子:388
专家分:1809
注 册:2012-11-2
得分:0 
把搜索到的strstr函数原型发上来 供学习

程序代码:
1.Copyright 1990 Software Development Systems, Inc.   
char *strstr( const char *s1, const char *s2 )
  {
  int len2;
  if ( !(len2 = strlen(s2)) )
  return (char *)s1;
  for ( ; *s1; ++s1 )
  {
  if ( *s1 == *s2 && strncmp( s1, s2, len2 )==0 )
  return (char *)s1;
  }
  return NULL;
  }
  2.Copyright 1986 - 1999 IAR Systems. All rights reserved
  char *strstr(const char *s1, const char *s2)
  {
  int n;
  if (*s2)
  {
  while (*s1)
  {
  for (n=0; *(s1 + n) == *(s2 + n); n++)
  {
  if (!*(s2 + n + 1))
  return (char *)s1;
  }
  s1++;
  }
  return NULL;
  }
  else
  return (char *)s1;
  }

我们的目标只有一个:消灭0回复!
while(1)
++money;
2012-12-06 12:06
clq501
Rank: 1
等 级:新手上路
帖 子:5
专家分:5
注 册:2012-11-26
得分:0 
回复 3楼 mmmmmmmmmmmm
2012-12-17 18:12
clq501
Rank: 1
等 级:新手上路
帖 子:5
专家分:5
注 册:2012-11-26
得分:0 
回复 2楼 mmmmmmmmmmmm
呵呵,我刚入门,看不太懂,还是谢谢分享
2012-12-17 18:13
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
回复 2楼 mmmmmmmmmmmm
你没有必要拷贝这两个串吧。
而且你写的这个 s1 = new char 是不对的。这只分配一个 char 的空间,起码也得 s1 = new char[strlen(src)] 类似的写法。

下面也有逻辑错误,两个串一样长,也不一定就是两个串一样。有可能返回 NULL 的。
    else if (strlen(s2) == strlen(s1))
    {
        return s1;
    }



[ 本帖最后由 pangding 于 2012-12-19 10:04 编辑 ]
2012-12-19 10:00



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-389841-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024485 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved