k[z++]=m[i];
k[z]='\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();}
但是还是有问题~还是不能得到想要的结果~我也快晕了~
/* 我的实现 */
#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编辑过]