k[z++]=m[i];
k[z]='\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);
}
}
----------------解决方案--------------------------------------------------------
12楼写的看不懂~我的能力有限~~那个 -> 是什么意思, -> 好像是用在结构体里的吧~
[此贴子已经被作者于2007-11-20 23:14:09编辑过]
----------------解决方案--------------------------------------------------------
他发的是求二叉树深度的.
----------------解决方案--------------------------------------------------------
现在刚学到二叉树而已~刚刚讲完二叉树的重要性质
我上面的程序改成
#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();}
但是还是有问题~还是不能得到想要的结果~我也快晕了~
----------------解决方案--------------------------------------------------------
/* 我的实现 */
#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编辑过]
----------------解决方案--------------------------------------------------------
/* 楼主程序修正版 */
#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编辑过]
----------------解决方案--------------------------------------------------------
给搂主一个建议,编好程序调试下,看程序是怎么运行的。
要么自己当电脑运行下这些代码。可以在纸上写出这些步骤,和产生的结果。
[此贴子已经被作者于2007-11-21 1:21:31编辑过]
----------------解决方案--------------------------------------------------------
恩~明白了~原来用I++的话,会掉过部分需要比较的字符串~我觉得后面的
i += (t - 1); 可以不用要.
因为如果输入
主串:aaaaaaaaaa
子串:aa
那么依次往后找的话就应该是
cont=9.
谢谢热心的cosdos
接受你的建议~以后会注意的~
16楼的程序很精练,学到了很多,不知道我什么时候能达到你的水平~!
[此贴子已经被作者于2007-11-21 11:40:48编辑过]
----------------解决方案--------------------------------------------------------
应该是直接用fun而没实参~~
----------------解决方案--------------------------------------------------------