社区
C语言
帖子详情
初学C,请教一个算法的实现!
didazy
2005-07-12 12:33:45
/*从键盘输入字符串s1="abcdabcdef"和字符串s2="cde"
编写函数,运用指针,若字符串s2是字符串s1的子串
找到字符串s2在字符串s1中的起始位置,否则给出提示信息*/
...全文
416
11
打赏
收藏
初学C,请教一个算法的实现!
/*从键盘输入字符串s1="abcdabcdef"和字符串s2="cde" 编写函数,运用指针,若字符串s2是字符串s1的子串 找到字符串s2在字符串s1中的起始位置,否则给出提示信息*/
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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算法
-C语言
初学
者学习代码.zip
-C语言
初学
者学习代码
【程序设计基础】C/C++编程练习:上机测试题集锦与解析-涵盖发奖金、求闰年数等经典
算法
题目
内容概要:本文档为程序设计基础上机测试题集1,涵盖多个编程练习题目,包括但不限于:发奖金(优化纸币组合)、求闰年数(计算指定年份内的闰年总数)、猴子吃桃(使用倒推法解决递减问题)、小游戏(判断数字之和是否为特定数值的倍数)、考拉兹猜想(验证数学猜想并打印序列)、凯撒密码(
实现
简单的字符加密
算法
)、百钱买百鸡(解决古代数学问题)、素数判定(判断输入是否为素数)、计算平均成绩统计不及格人数(处理学生成绩数据)以及打印数字图案(根据输入生成特定格式的数字矩阵)。每个题目都提供了具体的输入输出示例和C/C++代码
实现
。 适合人群:计算机专业学生或具有一定编程基础的学习者,尤其是正在学习C/C++语言和基础
算法
的人群。 使用场景及目标:①作为课堂作业或课后练习,巩固所学知识;②用于编程入门考试或竞赛准备;③帮助
初学
者理解常见
算法
思想和编程技巧,提高解决问题的能力。 阅读建议:建议读者先尝试独立完成每个题目,之后再参考提供的代码
实现
,对比自己的思路与标准答案之间的差异,注意代码规范性和效率优化。对于不太理解的地方,可以通过查阅相关资料或向老师
请教
来加深理解。
基本
算法
(C++版本)
基本
算法
(C++版本) 基本
算法
(C++版本 基本
算法
正式稿
给C++
初学
者的忠告
给C++
初学
者的50个忠告
完整word版-C语言课程总结.doc
完整word版-C语言课程总结.doc
C语言
70,020
社区成员
243,264
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章