主题:链式存储存结构方式下求子串
//*******以下是在链式存储存结构方式下求子串***
/****
#include <stdio.h>
#include <string.h>
#include<malloc.h>
#include<iostream.h>
#define MAXNUM 80
typedef struct node
{
char str;
struct node *next;
}slstrtype;
void SiInsert_back(slstrtype *h,char x);//后插入
void Output_before(slstrtype *head);//单链表正向输出
void substr(slstrtype *s1,slstrtype *s2,int m,int n);//求从s1第m个字符起,取长度为n的字符存在s2中
main()
{
slstrtype *s1,*s2;
int m,n,s1length;
char InData;
s1=(slstrtype *)malloc(sizeof(slstrtype));
s1->str=NULL;
s1->next=NULL;
s2=(slstrtype *)malloc(sizeof(slstrtype));
s2->str=NULL;
s2->next=NULL;
printf("请输入测试s1的长度:");
scanf("%d",&s1length);
printf("请输入%d个字符给s1:",s1length);
for(int i=0;i<s1length;i++)
{
cin>>InData;
SiInsert_back(s1,InData);//单链表的后插入
}
Output_before(s1);//单链表正向输出
printf("请输入测试s1的位置:");
scanf("%d",&m);
printf("输入要取的个数:");
scanf("%d",&n);
substr(s1,s2,m,n);//求从s1第m个字符起,取长度为n的字符存在s2中
printf("输出字符串截取后的情况:");
Output_before(s2);//单链表正向输出
}
void SiInsert_back(slstrtype *h,char x)//后插入
{
slstrtype *p,*s;
s=(slstrtype *)new (slstrtype);
s->str=x;
s->next=NULL;
p=h->next;
if(p==NULL)
{
h->next=s;
return;
}
while(p->next!=NULL)
p=p->next;
p->next=s;
}
void Output_before(slstrtype *head)//单链表的输出
{
slstrtype *p;
p=head->next;
while(p!=NULL)
{
printf("%c ",p->str);
p=p->next;
}
printf("\n");
}
void substr(slstrtype *s1,slstrtype *s2,int m,int n)//求从s1第m个字符起,取长度为n的字符存在s2中
{
slstrtype *p,*q,*v;
int length1,j;
p=s1;
for(length1=0;p->next!=NULL;p=p->next)
length1++;
if(m<=0||m>length1||n<=0)
{
s2=NULL;
printf("!!输入测试s1的位置参数错误.\n");
return;
}
p=s1;
for(j=0;j<m;j++)p=p->next;
s2->next=(slstrtype*)malloc(sizeof(slstrtype));
q=s2->next;
for(j=0;j<n&&p!=NULL;j++)
{
q->str=p->str;
p=p->next;
q->next=(slstrtype *)malloc(sizeof(slstrtype));
q=q->next;
}
q->str='\0';q->next=NULL;
return;
}
****/
//*******以上是在链式存储存结构方式下求子串***
/****
#include <stdio.h>
#include <string.h>
#include<malloc.h>
#include<iostream.h>
#define MAXNUM 80
typedef struct node
{
char str;
struct node *next;
}slstrtype;
void SiInsert_back(slstrtype *h,char x);//后插入
void Output_before(slstrtype *head);//单链表正向输出
void substr(slstrtype *s1,slstrtype *s2,int m,int n);//求从s1第m个字符起,取长度为n的字符存在s2中
main()
{
slstrtype *s1,*s2;
int m,n,s1length;
char InData;
s1=(slstrtype *)malloc(sizeof(slstrtype));
s1->str=NULL;
s1->next=NULL;
s2=(slstrtype *)malloc(sizeof(slstrtype));
s2->str=NULL;
s2->next=NULL;
printf("请输入测试s1的长度:");
scanf("%d",&s1length);
printf("请输入%d个字符给s1:",s1length);
for(int i=0;i<s1length;i++)
{
cin>>InData;
SiInsert_back(s1,InData);//单链表的后插入
}
Output_before(s1);//单链表正向输出
printf("请输入测试s1的位置:");
scanf("%d",&m);
printf("输入要取的个数:");
scanf("%d",&n);
substr(s1,s2,m,n);//求从s1第m个字符起,取长度为n的字符存在s2中
printf("输出字符串截取后的情况:");
Output_before(s2);//单链表正向输出
}
void SiInsert_back(slstrtype *h,char x)//后插入
{
slstrtype *p,*s;
s=(slstrtype *)new (slstrtype);
s->str=x;
s->next=NULL;
p=h->next;
if(p==NULL)
{
h->next=s;
return;
}
while(p->next!=NULL)
p=p->next;
p->next=s;
}
void Output_before(slstrtype *head)//单链表的输出
{
slstrtype *p;
p=head->next;
while(p!=NULL)
{
printf("%c ",p->str);
p=p->next;
}
printf("\n");
}
void substr(slstrtype *s1,slstrtype *s2,int m,int n)//求从s1第m个字符起,取长度为n的字符存在s2中
{
slstrtype *p,*q,*v;
int length1,j;
p=s1;
for(length1=0;p->next!=NULL;p=p->next)
length1++;
if(m<=0||m>length1||n<=0)
{
s2=NULL;
printf("!!输入测试s1的位置参数错误.\n");
return;
}
p=s1;
for(j=0;j<m;j++)p=p->next;
s2->next=(slstrtype*)malloc(sizeof(slstrtype));
q=s2->next;
for(j=0;j<n&&p!=NULL;j++)
{
q->str=p->str;
p=p->next;
q->next=(slstrtype *)malloc(sizeof(slstrtype));
q=q->next;
}
q->str='\0';q->next=NULL;
return;
}
****/
//*******以上是在链式存储存结构方式下求子串***