| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 700 人关注过本帖
标题:关于字符串子串查找程序,有问题,求高手指点
只看楼主 加入收藏
shengshm1989
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2012-11-15
结帖率:16.67%
收藏
已结贴  问题点数:20 回复次数:8 
关于字符串子串查找程序,有问题,求高手指点
问题描述:  
判断一个字符串(dst)是否是另一个字符串(src)的子串;  
输出子串在母串中的第一次出现的起始位置;  
匹配的时候不区分大小写;  
不能使用库函数(使用库函数按0分计算);  
要求实现函数:  
unsigned int str_str(char * src, char *dst);
返回:如果dst是src的子串 则返回起始位置       如果不是 则返回0
输入:src 指向母串的指针; dst 指向子串的指针
示例  
src->akrsd5859  dst->rsd
则返回3
src->Rstsawerst36ds  dst->rst
则返回8
src->dfsge         dst-> dfsgesa
则返回0
程序代码:
#include<iostream>
//#include<assert>
using namespace std;

 int result=0;
unsigned int str_str(char *src,char *dst)//判断一个字符串是否是另一个字符串的子串,输出子串在母串中第一次出现的位置
{char *pa=src;                                //匹配时不区分大小写
 char *pb=dst;

 int M=strlen(src);

 int N=strlen(dst);

 int count=0;

 for(int i=0;i<M;i++)

 {  if(*pb==' ')
   {count=i+2-N;
    return count;
    break;
    }
     if(*pa==*pb||*pa==*pb+32||*pa==*pb-32)
     {pa++;
      pb++;
     }
    else{pa++;
        pb=dst;
        }
  }
}

//主函数
int main()
{char src[]="akrsd5859";

 char dst[]="rsd";

 result=str_str(src,dst);

 cout<<"result="<<result<<endl;
}

这是我写的代码,可是结果根本不对,想问问大家程序哪里出了问题
搜索更多相关主题的帖子: 区分大小写 字符串 
2013-09-09 22:26
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:5 
《数据结构基础C语言版》里面提到了字符串匹配算法;就算不使用库函数,你也可以找一下他的实现方法的。

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2013-09-10 07:33
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:5 
为什么要自己写一个?函数库中有的,strstr 或者 strnstr 等一套函数。
而且  if(*pa==*pb||*pa==*pb+32||*pa==*pb-32) 这样不对吧,不要限制一下范围?A 编码好像是65吧,那么 编码为33的 字符,被认为和A一样啦?

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-09-10 08:19
shengshm1989
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2012-11-15
收藏
得分:0 
回复 2楼 pauljames
恩恩,数据结构我还没学过,正在学,谢谢啊
2013-09-10 09:13
shengshm1989
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2012-11-15
收藏
得分:0 
回复 3楼 yuccn
恩恩,提出了宝贵意见啊,可是核心是里面的匹配不对,结果让人摸不着头脑
2013-09-10 09:15
zhulincao
Rank: 1
等 级:新手上路
帖 子:1
专家分:5
注 册:2013-9-9
收藏
得分:5 
程序代码:
 if(*pb==' ')
   {count=i+2-N;
    return count;
    break;
    }

这一段代码判断字符串是否结束有问题,并且
if(*pa==*pb||*pa==*pb+32||*pa==*pb-32)
     {pa++;
      pb++;
     }

这一段也有问题(因为字符串中不一定全是字母,加减32是错误的。),自己再好好看看。
2013-09-10 11:13
未未来
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:182
专家分:157
注 册:2012-11-6
收藏
得分:5 
我不知道你为什么不要用标准库函数,但是我觉得用string的话比较好写一些
我没看你的代码,
这是我写的,你测试一下,
程序代码:
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
unsigned int str_str(char * src, char *dst)
{
    size_t m=strlen(src);
    size_t n=strlen(dst);
    string  s1(src,src+m);
    string s2(dst,dst+n);
    if(n>m) return 0;
    else if(n<=m){  typedef string::iterator iter;
    iter begit=s1.begin();
    iter endit=s1.begin()+n;
      int counts=0;
        while(endit+counts!=s1.end()){
            string x(begit+counts,endit+counts);
            if(x==s2){return (counts+1);
            }
            else{
                ++counts;
            }


        }


    }
else {return 0;}

}
int main()
{char src[]="akrsd5859";
char dst[]="rsd";
unsigned int result;
result=str_str(src,dst);
cout<<"result="<<result<<endl;

return 0;
}
2013-09-10 18:39
shengshm1989
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2012-11-15
收藏
得分:0 
回复 6楼 zhulincao
恩恩,这段确实有问题,谢谢提醒啊
2013-09-10 23:00
shengshm1989
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2012-11-15
收藏
得分:0 
回复 7楼 未未来
您的程序可以运行,谢谢参考啊,学习了
2013-09-10 23:07
快速回复:关于字符串子串查找程序,有问题,求高手指点
数据加载中...
 
   



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

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