回 帖 发 新 帖 刷新版面

主题:关于数据结构中的串定位的问题

/* 这个是串的操作*/
 #include "stdio.h"
 #include "string.h"
 #define AA 30
 #define A 6
 #define B 6
 typedef struct d
 { char m[AA];
   int len;
 }dd;
 
int index(dd s,dd s1)
{
 int i,j,k;     /* 刚才这里落下了一个";结果导致很多的错误,包括未定义*/
 i=0;
    while(i<=(s.len-s1.len))
   { j=i;
    k=0;
    while((k<s1.len)&&(s.m[j]==s1.m[k])) /* 有事吵了两个s,晕死了*/
    {j++;
     k++;
     }
    if(k==s1.len)
    return (i);/*找到位置,然后返回值*/
    else
    i++;
   }
   return(-1);
}
main()
{ dd a,v;int i;

 printf("kai shi shur u:\n");
 for(i=0;i<A;i++)
 scanf(" %c",&a.m[i]);
 a.len=i+1;
printf("inter the zi chuan :\n");
 for(i=0;i<3;i++)
 scanf(" %c",&v.m[i]);
 v.len=i+1;
 q=index(a,v);
 printf(" weizhi shi %3d",q);
 getch();
 }
意思是我定义了一个串的结构,不是字符串,是数据结构上的串,我定义了一个大串为a,现在我有定义了一个子串为v,我的程序的意思是,在这个大串中查找这个子串的位置,有的话,返回为i,即字串的位置 ,但是,我现在根本就是不能实现啊,老是输出一个-1,而且吧,如果我把那个return -1去了,就是一值返回3(我想是系统随机生成的),这个例子是在书上的,但是,我老是发现不了到底是哪里的错,,请各位帮忙啊,,,,,,,,,,,,
再就是,我的这个串的建立是不是正确 啊?那个len,也就是输入的字符的长度该怎样输入?????麻烦了。。各位高手们

回复列表 (共6个回复)

沙发

int index(dd s,dd s1)
{
    int i,j,k;
    i=0;
    while(i <= (s.len-s1.len) ) 
    {
        j = i;
        k = 0;
        while( (k < s1.len - 1) && (s.m[j] == s1.m[k]) ) //s1.len => s1.len - 1
        {
            j++;
            k++;
        }
        if(k == s1.len - 1) //s1.len => s1.len - 1                         
        {
            return (i);/*找到位置,然后返回值*/
        }
        else
        {
            i++;
        }
   }
   return(-1);
}

板凳

另外,不知道楼主在设定len时为什么要设为i + 1,而不是i,是不是考虑把最后一位设为'\0'?
输入len可以这样:
scanf("%d",&a.len);
scanf("%d",&v.len);

3 楼

2楼有点答非所问
len不用输入,scanf也不用那么麻烦
直接对m成员整体输入,然后求strlen不是很简单么
考虑
scanf(" %s",a.m);
a.len=strlen(a.m);

4 楼


恩有理 啊,,,

5 楼


/* 这个是串的操作*/
 #include "stdio.h"
 #include "string.h"
 #define AA 30
 #define A 6
 #define B 6
 typedef struct d
 { char m[AA];
   int len;
 }dd;
 
int index(dd s,dd s1)
{
 int i,j,k;     /* 刚才这里落下了一个";结果导致很多的错误,包括未定义*/
 i=0;
    while(i<=(s.len-s1.len))
   { j=i;
    k=0;
    while((k<s1.len)&&(s.m[j]==s1.m[k])) /* 有事吵了两个s,晕死了*/
    {j++;
     k++;
     }
    if(k==s1.len)
    return (i);/*找到位置,然后返回值*/
    else
    i++;
   }
   return(-1);
}
main()
{ dd a,v;int i;

 printf("kai shi shur u:\n");
 for(i=0;i<A;i++)
 scanf(" %c",&a.m[i]);
 a.len=i+1;
printf("inter the zi chuan :\n");
 for(i=0;i<3;i++)
 scanf(" %c",&v.m[i]);
 v.len=i;****其实,三个i已经代表了输入的字符的个数,因为虽然i<3.但是下标最大是2,而由于i++了。所以在后面显示,i为3,,,,,,,,,*******
 q=index(a,v);
 printf(" weizhi shi %3d",q);
 getch();

6 楼

深圳市华信群英科技有限公司与知名通信软件公司正式签订定向输送人才的合作协议
针对想进入IT软件行业的有志人士提供专业的企业内训
实训课程采用“2+3”分段教学模式,分为2个月理论强化和3个月项目实训两个阶段
实训前就签订就业安置协议,岗前实训后入职
不仅学费优惠而且是企业定向培训定向招聘,百分百保证就业
有意向请登录www.szctt.com,或加QQ:1179397962做详细咨询

我来回复

您尚未登录,请登录后再回复。点此登录或注册