社区
C语言
帖子详情
初学C,请教一个算法的实现!
didazy
2005-07-12 12:33:45
/*从键盘输入字符串s1="abcdabcdef"和字符串s2="cde"
编写函数,运用指针,若字符串s2是字符串s1的子串
找到字符串s2在字符串s1中的起始位置,否则给出提示信息*/
...全文
454
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算法
零起点学
算法
01——第
一个
程序Hello World!
零起点学
算法
01——第
一个
程序Hello World! Description 题目很简单 输出"Hello World!"(不含引号),并换行。 Input 没有输入 Output 输出"Hello World!"(不含引号),并换行。 Sample Output Hello World! 题目分析:萌新题,留作纪念吧…… #include&l...
团体程序设计天梯赛 L1-013 计算阶乘和
对于给定的正整数N,需要你计算S=1!+2!+3!+...+N!。 输入格式: 输入在一行中给出
一个
不超过10的正整数N。 输出格式: 在一行中输出S的值。 输入样例: 3 输出样例: 9 解题思路: 打表 AC代码: #include<stdio.h> typedef long long ll; ll a[12]; voi...
c语言菜鸟编译器,C语言菜鸟基础教程之Hello World
搜索热词首先,需要一款C语言的编译器,可以使用在线编译器,也可以在本地安装编译器,比如Mac电脑可以安装Xcode,PC可以安装Dev C++。编写第
一个
程序:Hello World!@H_502_6@#include int main(){/* 我的第
一个
C 程序 */printf("Hello,World! \n");return 0;}运行结果:Hello,World!程序分析:(1)这里...
C语言
实现
快速排序
算法
序 愿天上的每
一个
流星,都为你而闪耀天际。 嗨,这里是狐狸~~ 今天是
各种PID
算法
——用C语言去
实现
文章目录前言PID原理简单介绍位置型PID增量式PID位置型PID——C语言增量型PID——C语言积分分离的PID控制
算法
——C语言抗积分饱和的PID控制
算法
——C语言变积分的PID控制
算法
——C语言 前言 PID
算法
在工业应用中随处可见。大学期间,想做各类科创也少不了PID
算法
的身影。PID除了需要理解原理,用合理的代码实线PID
算法
也让许多同学们苦恼,我总结了常用的多种PID
算法
的C语言实...
C语言
70,040
社区成员
243,237
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章