(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);
}
} 展开
#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);
}
} 展开
2个回答
展开全部
#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);
// }
}
追问
原程序错误的原因是什么?
断点要在哪取呢?
谢谢
展开全部
已经修改过了:(下面的程序中没有必要使用结构体,用二个字符数组就可以了:-()
#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);
}
}
#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);
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询