定长顺序串【C语言】
用定长顺序串编写下列算法
1.将顺序串r中所有值为ch1的字符转换成ch2的字符。
2.将顺序串r中所有字符按照相反次序仍存放在r中。
3.从顺序串r中删除其值等于ch的所有字符。
4.从顺序串r1中第Index个字符起求首次与串r2相同的子串的起始位置。
5.从顺序串r中删除所有与串r1相同的子串。
#include <stdio.h>
#include <stdlib.h>
#define size 40
int num=0;
int Index=0;
typedef struct
{
char ch[size];
int len;
}Seqstring;
void Create(Seqstring *S)
{
int j;
for(j=0;j<num;j++)
{
scanf(" %c",&S->ch[j]);
}
S->len=num;
}
void Replace(Seqstring *S,char e1,char e2)
{
int i;
for(i=0;i<=S->len;i++)
{
if(S->ch[i]==e1)
{
S->ch[i]=e2;
}
}
}
void Reverse(Seqstring *S)
{
Seqstring *ReS=S;
int i;
for(i=0;i<ReS->len;i++)
{
ReS->ch[i]=S->ch[S->len-1-i];
}
S=ReS;
}
void Delete(Seqstring *S,char e)
{
int i;
for(i=0;i<S->len;i++)
{
if(S->ch[i]==e)
{
int j;
for(j=i;j<=S->len-1;j++)
{
int temp=1;
while(S->ch[j]==S->ch[j+temp])
{
temp++;
}
S->ch[j]=S->ch[j+temp];
}
}
}
S->len=0;
int k=0;
while(S->ch[k]!='\0')
{
S->len++;
k++;
}
if(S->len==0)
{
printf("该串被清空...\n");
}
}
void Match(Seqstring *r1,Seqstring *r2,int m)
{
int i;
if(r1->len-m<r2->len)
{
printf("匹配失败...\n");
return;
}
for(i=m-1;i<r1->len;i++)
{
int j=i;
int k=0;
while(r1->ch[j]==r2->ch[k])
{
j++;
k++;
}
if(k==r2->len)
{
printf("匹配成功...\n将您上次输入的数字当作位置“1”\n那么两串匹配的起始位置为:%d\n",i+1-m+1);
return;
}
}
printf("匹配失败...\n");
}
void sDelete(Seqstring *S,Seqstring *s)
{
if(s->len>S->len)
{
return;
}
int i;
for(i=0;i<=S->len;i++)
{
int j=i;
int k=0;
while(S->ch[j]==s->ch[k])
{
j++;
k++;
}
if(s->ch[k+1]=='\0' && s->ch[k]=='\0')
{
int x;
for(x=1;x<=s->len;x++)
{
int t;
for(t=i;t<=S->len;t++)
{
S->ch[t]=S->ch[t+1];
}
S->len--;
}
}
}
}
void view(Seqstring S)
{
if(S.len==0)
{
printf("该串为:\n空\n");
return;
}
printf("该串为:");
int i;
for(i=0;i<S.len;i++)
{
printf("%c",S.ch[i]);
}
printf("\n");
}
int main()
{
Seqstring r;
printf("请您输入--串的长度:\n");
scanf("%d",&num);
r.len=num;
printf("请你输入--串:\n");
Create(&r);
view(r);
printf("#第一步操作#\n");
printf("请您输入--您想替换的字符:\n");
char ch1;
scanf(" %c",&ch1);
printf("您想将它替换成:\n");
char ch2;scanf(" %c",&ch2);
Replace(&r,ch1,ch2);view(r);
printf("#第二步操作#\n");
printf("您的顺序串即将反转...\n");
Reverse(&r);view(r);
printf("#第三步操作#\n");
printf("请您输入--您想删除的字符:\n");
char ch;
scanf(" %c",&ch);
Delete(&r,ch);
view(r);
printf("#第四步操作#\n");
Seqstring r1;
printf("请您输入--串r1的长度:\n");
scanf("%d",&num);
r1.len=num;
printf("请你输入--串r1:\n");
Create(&r1);
view(r1);
Seqstring r2;
printf("请您输入--串r2的长度:\n");
scanf("%d",&num);
r2.len=num;
printf("请你输入--串r2:\n");
Create(&r2);
view(r2);
printf("根据题意:\n");
printf("您想从r1的第几个字符开始查找:\n");
scanf("%d",&Index);
printf("r1和r2正在进行匹配...\n");
Match(&r1,&r2,Index);
printf("#第五步操作#\n");
printf("显示r:\n");
view(r);
printf("r的长度:%d\n",r.len);
printf("显示r1:\n");
view(r1);
printf("r1的长度:%d\n",r1.len);
printf("正在去除r中与r1相同的子串...\n");
sDelete(&r,&r1);
printf("显示r:\n");
view(r);
printf("hello world\n");
return 0;
}
请您输入--串的长度:
10
请你输入--串:
abcdeabcde
该串为:abcdeabcde
#第一步操作#
请您输入--您想替换的字符:
a
您想将它替换成:
e
该串为:ebcdeebcde
#第二步操作#
您的顺序串即将反转...
该串为:edcbeebcde
#第三步操作#
请您输入--您想删除的字符:
e
该串为:dcbbccd
#第四步操作#
请您输入--串r1的长度:
4
请你输入--串r1:
cbbc
该串为:cbbc
请您输入--串r2的长度:
2
请你输入--串r2:
bc
该串为:bc
根据题意:
您想从r1的第几个字符开始查找:
2
r1和r2正在进行匹配...
匹配成功...
将您上次输入的数字当作位置“1”
那么两串匹配的起始位置为:2
#第五步操作#
显示r:
该串为:dcbbccd
r的长度:7
显示r1:
该串为:cbbc
r1的长度:4
正在去除r中与r1相同的子串...
显示r:
该串为:dcd
hello world
Program ended with exit code: 0
Copyright © 2019 wyq. All rights reserved. |
---|