| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1054 人关注过本帖
标题:一个查找字符串的程序
只看楼主 加入收藏
lixang
Rank: 1
等 级:新手上路
帖 子:231
专家分:0
注 册:2006-7-15
收藏
 问题点数:0 回复次数:7 
一个查找字符串的程序

#include<iostream.h> //在一个字符串中找另外一个字符串存在的位置
//比如"abcdefgh"与"cde"-----在第三个字母处找到!
#include<string.h>

void seach_str(char*str,char*substr)
{
int n=0;
while(strlen(str)>=strlen(substr))//
当被查找的字符>=要查找的字符传时.才执行..........
{

char *Substr=substr;
if(*str!=*Substr)
{
str++;
n++;//
被查找的字符到了第几个字母
}
if(*str==*Substr)
{
str++;
Substr++;
n++;//
被查找的字符这时又到了第几个字母
}
if(*Substr=='\0') break;//
查找的字符到了末尾就结素!
}
cout<<"在第"<<n-strlen(substr)+1<<"个字母处找到了你要查找的字符串"<<endl;
}

void main()
{
char str1[]="abdtdthecf";
char substr1[]="bdt";
for(int i=0;i<11;i++)
cout<<str1[i]<<' ';
for( i=0;i<4;i++)
cout<<substr1[i]<<' ';

seach_str(str1,substr1);//结果出乎意料!
}

望大家指点指点!

[此贴子已经被作者于2006-8-21 21:41:21编辑过]

搜索更多相关主题的帖子: 字符 
2006-08-21 17:12
myajax95
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:30
帖 子:2978
专家分:0
注 册:2006-3-5
收藏
得分:0 
整个逻辑不太对。字串查找要比这个复杂,自己写的话大概是个state machine的意思。假如被查字串有N个字母,那么总共就用N个state(也许是N+1个,自己算算吧)。最开始是第一个state,表示正在比较第一个字符。如果个总字串一样,被查字串++,总自串++,state++,否则总自串++,被查字串回0,state回0。再一个一个的查,总复杂度是N^2。你的程序好像至少缺了里面的一层循环。

http://myajax95./
2006-08-22 05:04
virusswb
Rank: 1
等 级:新手上路
威 望:1
帖 子:342
专家分:0
注 册:2005-8-6
收藏
得分:0 
你的设计有问题

循环都没有用

怎么可以

我研究一下,给你一个答案

jorden008@
2006-08-22 11:02
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
#include <iostream>
using namespace std;
int searchSubstr(const char*str,const char*buf)
{
const char*sPos=buf;
int max=(int)strlen(str);
int end=0;
for(int i=0;i<max;i++,str++)
{
static int start=i;
static bool b_find=false;
if (*buf==*str) {
end++;
buf++;
b_find=true;
if(end==strlen(sPos))return start;
}
else {
if (b_find) {
i--;
str--;
b_find=false;
}
start=i+1;
end=0;
buf=sPos;
}
}
return -1;
}
void main()
{
cout<<searchSubstr("12323456","234")<<endl;
}

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-08-22 11:57
lixang
Rank: 1
等 级:新手上路
帖 子:231
专家分:0
注 册:2006-7-15
收藏
得分:0 
以下是引用wfpb在2006-8-22 11:57:09的发言:
#include <iostream>
using namespace std;
int searchSubstr(const char*str,const char*buf)
{
const char*sPos=buf;
int max=(int)strlen(str);
int end=0;
for(int i=0;i<max;i++,str++)
{
static int start=i;
static bool b_find=false;
if (*buf==*str) {
end++;
buf++;
b_find=true;
if(end==strlen(sPos))return start;
}
else { //能解释以下么?
if (b_find) {
i--;
str--;
b_find=false;
}
start=i+1;
end=0;
buf=sPos;
}
}
return -1; //返回-1是怎么回事呢?
}
void main()
{
cout<<searchSubstr("12323456","234")<<endl;
}

2006-08-23 14:38
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
else
{
    if (b_find)    //看上面:初始化b_find为false,这里不会执行。
                   //如果在没有找到相同的字符,就回头一步的话,str就不知道指向什么了。
    {
        i--;       //由于指向了不想等的一个字符,所以str要往后退一步,从新和buf的第一个开始比较
        str--;     //i表示遍历字符的个数,当然也应该和str一起做“--”运算了。
        b_find=false;    //将b_find换为false,如果不加次行,那么接着不相同str又要--,与上面的情况一样
    }
    start=i+1;    //改变起始地址
    end=0;        //重新改变为0
    buf=sPos;     //恢复原貌
}

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-08-23 18:13
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
返回-1只是好比其他的查找函数一样,如果未找到,就返回-1。

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-08-23 18:14
heliujin
Rank: 2
等 级:论坛游民
帖 子:249
专家分:14
注 册:2006-3-14
收藏
得分:0 

看看这个行不?我是个初学者 希望各位高手给点评价吧
谢谢大家了
#include<iostream.h>
#include<string.h>

void sort(char const *s,char const *d)
{
int n=0;
int ls=strlen(s);
int ld=strlen(d);
int k[10];
if(ls>=ld)
{
for(int i=0;i<ls-2;i++)
{
for(int j=0;j<ld-2;j++)
{
if(d[j]==s[i]&&d[j+1]==s[i+1]&&d[j+2]==s[j+2])
{
k[n]=i;
n=n+1;
}
}
}
for(int m=0;m<n;m++)
{
cout<<k[m]+1<<endl;
}
}
else
{
cout<<"error"<<endl;
}
}

void main()
{
sort("123456789123","123");
}

2006-08-26 17:56
快速回复:一个查找字符串的程序
数据加载中...
 
   



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

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