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

编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数
。例如,假定输入的字符串为:asd asasdfg asd as zx67 asd mklo,子字符串为:
as,则应输出6。
#include"stdio.h"
#include"string.h"
#include"conio.h"
#define M 80
#define N 10
int fun(char m[M],char n[N])
{int i,j,t,z,cont=0;
char k[N]; \\定义新的数组,用来存放截取的字符串
t=strlen(n);
j=strlen(m);
for(i=0;i<j;i++)
{z=0; \\还原k[]的下标值
{for(i=i;i<i+t&&i+t<j;i++) \\依次截取与N[]等长的一段存放在K[]中
{k[z++]=m[i];
k[z]='\0';}
if(!strcmp(k,n)) \\若K与N相同,则CONT自加1
cont++;}
}
return cont;}

void main()
{char m[M],n[N];
int z;
printf("intput 1:\n");
gets(m);
printf("intput 2:\n");
gets(n);
z=fun(m,n);
printf("cont=%d\n",z);
\\当红字部分改为printf("cont=%d\n",fun);时却提示有错误

getch();}
为什么我的程序不能得到想要的效果,到底哪个地方出了问题,请路过的帮忙看下,感谢!!!
现在编程序真郁闷没有一个是不出错的~麻烦大家了~

搜索更多相关主题的帖子: 字符 配对 
2007-11-20 21:52
zhuanghu1987
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2007-10-30
收藏
得分:0 
何为KMP      何为MS~   何为遍历搜索~

凤凰涅磐,欲火重生.
2007-11-20 22:09
zhuanghu1987
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2007-10-30
收藏
得分:0 
是我看错题目了~不好意思~
如果要求匹配的长度不为了2而为非固定的数呢~
我就是按这种思路编的程序~还是帮忙看下啊~

凤凰涅磐,欲火重生.
2007-11-20 22:19
zhuanghu1987
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2007-10-30
收藏
得分:0 

我的思路就是一个串一个串匹配的,可能与你们的匹配方式不同,就是这样才出来问题~
也不晓得问题出在哪了


凤凰涅磐,欲火重生.
2007-11-20 22:28
zhuanghu1987
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2007-10-30
收藏
得分:0 
以下是引用nuciewth在2007-11-20 22:36:00的发言:
k[z++]=m[i];
k[z]='\0';
这两句我也弄不明白

括号打错了,见谅~


凤凰涅磐,欲火重生.
2007-11-20 22:55
zhuanghu1987
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2007-10-30
收藏
得分:0 
12楼写的看不懂~我的能力有限~~那个  -&gt;  是什么意思,  -&gt;  好像是用在结构体里的吧~

[此贴子已经被作者于2007-11-20 23:14:09编辑过]



凤凰涅磐,欲火重生.
2007-11-20 23:09
zhuanghu1987
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2007-10-30
收藏
得分:0 

现在刚学到二叉树而已~刚刚讲完二叉树的重要性质
我上面的程序改成
#include"stdio.h"
#include"string.h"
#include"conio.h"
#define M 80
#define N 10
int fun(char m[M],char n[N])
{int i,j,t,z,b,cont=0;
char k[N];
t=strlen(n);
j=strlen(m);
for(i=0;i<j;i++)
{z=0;
for(b=i;i<b+t&&b+t<j;i++)
k[z++]=m[i];
k[z]='\0';
if(!strcmp(k,n))
cont++;
}
return cont;}

void main()
{char m[M],n[N];
int z;
printf("intput 1:\n");
gets(m);
printf("intput 2:\n");
gets(n);
z=fun(m,n);
printf("cont=%d\n",z);
getch();}
但是还是有问题~还是不能得到想要的结果~我也快晕了~


凤凰涅磐,欲火重生.
2007-11-20 23:50
zhuanghu1987
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2007-10-30
收藏
得分:0 
恩~明白了~原来用I++的话,会掉过部分需要比较的字符串~我觉得后面的
i += (t - 1); 可以不用要.
因为如果输入
主串:aaaaaaaaaa
子串:aa
那么依次往后找的话就应该是
cont=9.
谢谢热心的cosdos
接受你的建议~以后会注意的~
16楼的程序很精练,学到了很多,不知道我什么时候能达到你的水平~!

[此贴子已经被作者于2007-11-21 11:40:48编辑过]


凤凰涅磐,欲火重生.
2007-11-21 11:13
快速回复:字符串配对~
数据加载中...
 
   



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

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