社区
C语言
帖子详情
初学C,请教一个算法的实现!
didazy
2005-07-12 12:33:45
/*从键盘输入字符串s1="abcdabcdef"和字符串s2="cde"
编写函数,运用指针,若字符串s2是字符串s1的子串
找到字符串s2在字符串s1中的起始位置,否则给出提示信息*/
...全文
413
11
打赏
收藏
初学C,请教一个算法的实现!
/*从键盘输入字符串s1="abcdabcdef"和字符串s2="cde" 编写函数,运用指针,若字符串s2是字符串s1的子串 找到字符串s2在字符串s1中的起始位置,否则给出提示信息*/
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
arrowcy
2005-07-12
打赏
举报
回复
大致就是这样,细节问题你自己在调试调试吧
这么晚了,我也要睡了Zzz...
arrowcy
2005-07-12
打赏
举报
回复
这个有两种不同效率的实现方法,我就写一个效率低点的吧
int pos(char *source, char *template)
{
char *t=template;
int i, match, n;
n=0;
while(*source!='\0')
{
n++;
if(*source!=*template)//如果第一个字符不同,就继续扫描原串的下一个字符
source++;
else//如果相同,就比较两个串
{
match=1;
for (i=0; i<strlen(template); i++)
{
if (template[i]!=source[i])
{
match=0;
break;
}
}
if(match==1)
return n;
}
}
}
didazy
2005-07-12
打赏
举报
回复
呵呵,谢谢各位了.接着打基础!!
51365133
2005-07-12
打赏
举报
回复
int instr (const char * src,const char * dst)
{
int ret = 0 ;
const char *eos = dst;
const char *sos = src;
while(*src)
{
while(*dst && !(*(unsigned char *)src - *(unsigned char *)dst))
{
++src;
++dst;
}
if(!*dst)
{
ret=(src-sos)-(dst-eos);
return ret;
}
src=src-dst+eos+1;
dst=eos;
}
return 0;
}
上边我写的有点罗嗦了,用这个吧。
EagleMember
2005-07-12
打赏
举报
回复
各位讨论的正热闹呀,查找子串的算可以说是最基本的了呀,楼上几位都写的很好呀。
51365133
2005-07-12
打赏
举报
回复
#include <stdio.h>
#include <stdlib.h>
int instr (const char * src,const char * dst);
int main()
{
int ret=instr("abcdabglcdefuuu","cdef");
printf("%d",ret);
system("pause");
return 0;
}
int instr (const char * src,const char * dst)
{
int ret = 0 ;
const char *eos = dst;
const char *sos = src;
while(*src && !ret)
{
if((*(unsigned char *)src - *(unsigned char *)dst))
{
++src;
}
else
{
while(*dst && !(*(unsigned char *)src - *(unsigned char *)dst))
{
++src;
++dst;
}
if(!*dst)
{
ret=(src-sos)-(dst-eos);
}
else
{
src=src-dst+eos+1;
dst=eos;
}
}
}
return ret;
}
masui
2005-07-12
打赏
举报
回复
//求给定的两个字符串的最大公共子串你改一下就可以了。
#include<iostream>
#include<string>
using namespace std;
const int n=100;
int c[n][n];
char str[n];
int lcs_len(string a,string b,int c[][n])
{
int sa=a.length();
int sb=b.length();
int i,j;
for(i=0;i<=sa;++i)c[i][0]=0;
for(j=0;j<=sb;++j)c[0][j]=0;
for(i=1;i<=sa;++i)
{
for(j=1;j<=sb;++j)
{
if(a[i-1]==b[j-1])c[i][j]=c[i-1][j-1]+1;
else if(c[i][j-1]>c[i-1][j])c[i][j]=c[i][j-1];
else c[i][j]=c[i-1][j];
}
}
return c[sa][sb];
}
char*bulid_lcs(char str[],string a,string b)
{
int k,i=a.length(),j=b.length();
k=lcs_len(a,b,c);
str[k]='\0';
while(k>0)
{
if(c[i][j]==c[i-1][j])i--;
else if(c[i][j]==c[i][j-1])j--;
else
{
str[--k]=a[i-1];
i--;j--;
}
}
return str;
}
int main()
{
string a,b;
cout<<"enter two strings\n";
cout<<"enter first string:";
cin>>a;
cout<<"enter second string:";
cin>>b;
cout<<bulid_lcs(str,a,b);
system("PAUSE");
return 0;
}
foochow
2005-07-12
打赏
举报
回复
KMP模式匹配算法,书上都有直接的算法,自己看看
jixingzhong
2005-07-12
打赏
举报
回复
提供另外一个算法,
给予参考:
1 字符串S1、S2(子串),字符指针TEMP
2 S2长度为L
3 把S1中从第一个字符开始,L长度字符复制给TEMP
4 对TEMP和S2进行比较,(好象可以用一个内存函数)
5 把S1中从第二个字符开始,L长度字符复制给TEMP
6 比较
~~~~~~~~~~~~~~~~~~~~~~~~~
类推
这个问题是要求S1、S2长度相差不大才好用,否则效率不高!!!
Willpro
2005-07-12
打赏
举报
回复
int pos(char *source, char *template)
{
char *t= NULL;
int i, match, n;
n=0;
if(source == NULL || template == NULL)
{
return -1;//for wrong pointer
}
t = template;
while(*source!='\0')
{
n++;
if(*source!=*template)//Èç¹ûµÚÒ»¸ö×Ö·û²»Í¬£¬¾Í¼ÌÐøɨÃèÔ´®µÄÏÂÒ»¸ö×Ö·û
{
source++;
}
else//Èç¹ûÏàͬ£¬¾Í±È½ÏÁ½¸ö´®
{
match=1;
for (i = 0; i<strlen(template); i++)
{
if (template[i]!=source[i])
{
match=0;
break;
}
}
if(match==1)
{
return n;
}
}
}
}
极速小王子
2005-07-12
打赏
举报
回复
给你点提示:kmp算法
新手如何学习
算法
?
算法
如何入门以及零基础入门
算法
应该学些什么?
搬运工,看到一篇关于
算法
学习之路的总结,希望对你有帮助。 原文链接:zh.lucida.me/blog/on-le 我的
算法
学习之路 MAY 4TH, 2014 | COMMENTS 关于 严格来说,本文题目应该是我的数据结构和
算法
学习之路,但这个...
初学
Java (不要再删了!!!)
有个朋友
请教
Java内容。我就把作业给她看,备她使用,并一同学习。现在放到这里,也是一同学习的意思。发表自己的想法和学习内容,很爽的!第一篇,试水作业。第二篇boolean数据类型用法运算符【逻辑运算符、关系...
算法
与数据结构学习路线
随着科学技术的发展,人工智能已经逐渐渗透到各个行业,这是
一个
相当有前景的专业领域。 其中,
算法
工程师这一职位更是非常火爆,在急缺大量人才的同时,也吸引了众多求职者,那么,
初学
者该如何学好
算法
呢? ...
C语言
初学
者,
请教
各位大神
一个
问题
为什么这串代码无法计算平均值?而在while循环前加上
一个
scanf就可正常运行?原先这串代码算的是什么?
别头疼了,你要的
算法
和数据结构的学习路线来了!
随着科学技术的发展,人工智能已经逐渐渗透到各个行业,这是
一个
相当有前景的专业领域。 其中,
算法
工程师这一职位更是非常火爆,在急缺大量人才的同时,也吸引了众多求职者,那么,
初学
者该如何学好
算法
呢? ...
C语言
69,369
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章