(C语言程序问题)用调试找出问题并改错

这是一个字符串匹配的程序,若第二个为第一个字符串的子串,则匹配成功,否则匹配失败。#include<stdio.h>#include<stdlib.h>#definema... 这是一个字符串匹配的程序,若第二个为第一个字符串的子串,则匹配成功,否则匹配失败。
#include<stdio.h>
#include<stdlib.h>
#define maxsize 100
typedef struct { //建立串的结构体
char data[maxsize];
int len;
}seqstring;
seqstring * in_string() //输入串中元素
{
int i=0;
char s[maxsize];
seqstring *p; //定义串的结构体
p=(seqstring *)malloc(sizeof(seqstring *)); //动态分配内存
scanf("%s",&s);
while(s[i]!='\0')
{
p->data[i]=s[i];
i++;
}
p->data[i]='\0';
return p; //返回p
}
int bf_string(char *s,char *t) //模式匹配
{
int i=0,j=0,n=0;
while(s[i]&&t[j])
{
if(s[i]==t[j])
{
n=i;
i++;
j++;
}
else
{
i++;
j=0;
n=0;
}
}
return n;
}
void main()
{
seqstring *p,*q; //定义p,q
int e,i;
for(i=0;i<4;i++)
{
printf("请输入p的字符串:");
p=in_string(); //输入P
printf("请输入q的字符串:");
q=in_string(); //输入q
e=bf_string(p->data,q->data); //对p,q进行模式匹配
if(e==0)
printf("匹配失败!\n");
else
printf("在%d处匹配成功\n",e);
}
}
展开
 我来答
My_Persistence
2016-11-16 · TA获得超过3465个赞
知道大有可为答主
回答量:1201
采纳率:81%
帮助的人:409万
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxsize 100
typedef struct {           //建立串的结构体
char data[maxsize];
int len;
}seqstring;
seqstring * in_string()      //输入串中元素
{
int i=0;
char s[maxsize];
seqstring *p;      //定义串的结构体指针变量
p=(seqstring *)malloc(sizeof(seqstring)); //动态分配内存
scanf("%s",&s);  
while(s[i]!='\0')
{
p->data[i]=s[i];
i++;
}
p->data[i]='\0';
p->len=strlen(p->data); //字符串长度
return p;       //返回p
}
int bf_string(char *s,char *t)     //模式匹配
{
int i=0,j=0,n=0;
int tLen;
tLen=strlen(t);   //求子串的长度
while(s[i] && t[j])
{
if(s[i] == t[j])
{
i++;
j++;
n++;
}
else
{
j=0;
n=0;
i++;
}
}
if(j == tLen)
return i-n;
else
return 0;
}
void main()
{
seqstring *p,*q;    //定义p,q
int e,i;
// for(i=0;i<4;i++)  //我这里只是取消了for循环,你可以自己加上,这个对程序没影响的
// {
printf("请输入p的字符串:");
p=in_string();         //输入P
printf("请输入q的字符串:");
q=in_string();    //输入q
e=bf_string(p->data,q->data);    //对p,q进行模式匹配
if(e==0)
printf("匹配失败!\n");
else
printf("在%d处匹配成功\n",e);
free(p); //动态分配的内存空间用完了别忘记释放掉
free(q);
// }
}
追问
原程序错误的原因是什么?
断点要在哪取呢?
谢谢
听不清啊
高粉答主

2016-11-16 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.8亿
展开全部
已经修改过了:(下面的程序中没有必要使用结构体,用二个字符数组就可以了:-()
#include<stdio.h>
#include<stdlib.h>
#define maxsize 100
typedef struct { //建立串的结构体
char data[maxsize];
int len;
}seqstring;
seqstring * in_string() //输入串中元素
{
int i=0;
char s[maxsize];
seqstring *p; //定义串的结构体
p=(seqstring *)malloc(sizeof(seqstring *)); //动态分配内存
scanf("%s",&s);
while(s[i]!='\0')
{
p->data[i]=s[i];
i++;
}
p->data[i]='\0';
return p; //返回p
}
int bf_string(char *s,char *t) //模式匹配
{
int i=0,j=0,n=-1,k=0;
while(s[i]&&t[j])
{
if(s[i]==t[j])
{
if(k==0){n=i; k=1;}
i++;
j++;
}
else
{
i++;
j=0;
n=-1;
}
}
return n;
}
main()
{
seqstring *p,*q; //定义p,q
int e,i;
for(i=0;i<4;i++)
{
printf("请输入p的字符串:");
p=in_string(); //输入P
printf("请输入q的字符串:");
q=in_string(); //输入q
e=bf_string(p->data,q->data); //对p,q进行模式匹配
if(e==-1)
printf("匹配失败!\n");
else
printf("在%d处匹配成功\n",e+1);
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式