| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1501 人关注过本帖
标题:字符串配对~
只看楼主 加入收藏
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
ondy
Rank: 1
等 级:新手上路
威 望:1
帖 子:88
专家分:0
注 册:2007-9-4
收藏
得分:0 

int lengbtnode(btnode *b)
{
int lchird,rchird;
if(b==NULL) return 0;
else
{
lchird=lengbtnode(btnode->lchild);
lchird=lengbtnode(btnode->rchild);
return (lchird>rchird)?(lchird+1):(rchird+1);
}
}


2007-11-20 23:04
zhuanghu1987
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2007-10-30
收藏
得分:0 
12楼写的看不懂~我的能力有限~~那个  ->  是什么意思,  ->  好像是用在结构体里的吧~

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



凤凰涅磐,欲火重生.
2007-11-20 23:09
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
他发的是求二叉树深度的.

倚天照海花无数,流水高山心自知。
2007-11-20 23:23
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
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 

/* 我的实现 */

#include <stdio.h>
#define MAX 81

/* 接受2个字符串参数,返回 a 在 ar 中出现的次数 */
int fun(char * ar, char * a) /* v1.0 测试通过,没问题 */
{
int i, j, k;
int count = 0;
i = 0;
while(ar[i])
{
for(j = 0; a[j] && ar[i+j] && (k = (a[j] == ar[i+j])); j++); /* ; */

if(k && (a[j] == '\0'))
{
i += j;
count++;
}
else
i++;
}
return count;
}

/**************** Main ****************/

int main(void)
{
char ar[MAX];
char ar2[MAX];

gets(ar);
gets(ar2); /* 如果只判断 2 个字符,那么 */
/* 加上 ar2[2] = '\0'; */
printf("%d\n", fun(ar, ar2));

getchar();
return 0;
}


[此贴子已经被作者于2007-11-21 18:44:33编辑过]


—>〉Sun〈<—
2007-11-21 00:24
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 

/* 楼主程序修正版 */

#include "stdio.h"
#include "string.h"
#include "conio.h"
#define M 80
#define N 10

int fun(char m[], char n[]) /* m[M] 没用的 */
{
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; b < j && z < t; b++) /* i++ 会跳过不匹配的部分字符 */
k[z++] = m[b]; /* 该循环复制字符串 n 到 k */
k[z] = '\0';

if(!strcmp(k, n))
{
cont++;
i += (t - 1); /* 因为外循环式 for 循环所以再 - 1 */
}
}
return cont;
}

int main(void)
{
char m[M],n[N];
int z;
printf("intput 1:\n");
gets(m);
printf("intput 2:\n");
gets(n);

printf("cont = %d\n",fun(m,n));

getch();
return 0;
}


/* 这个程序因该在不使用库函数的情况下,自己完成 */
-
-

[此贴子已经被作者于2007-11-21 1:10:04编辑过]


—>〉Sun〈<—
2007-11-21 00:56
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
给搂主一个建议,编好程序调试下,看程序是怎么运行的。

要么自己当电脑运行下这些代码。可以在纸上写出这些步骤,和产生的结果。

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


—>〉Sun〈<—
2007-11-21 01:20
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
fqqklwj
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-4-22
收藏
得分:0 

应该是直接用fun而没实参~~


学习中真是受益匪浅,努力~努力~
2007-11-21 18:07
快速回复:字符串配对~
数据加载中...
 
   



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

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