当前位置: 代码迷 >> C语言 >> 字符串配对~
  详细解决方案

字符串配对~

热度:392   发布时间:2007-11-20 22:55:43.0
以下是引用nuciewth在2007-11-20 22:36:00的发言:
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而没实参~~


----------------解决方案--------------------------------------------------------
  相关解决方案