4.txt
来自「本程序的串编辑要求对串实现以下四种功能: (1)取子串:从给定串中取出定长的子」· 文本 代码 · 共 203 行
TXT
203 行
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#define MAXLen 50
typedef struct{
char str[MAXLen];
int len;
}string;
// 爱悠游 www.aiyoy.com bbs.aiyoy.com
//有问题? 来 爱悠游计算机技术讨论区:http://www.aiyoy.com/bbs/forumdisplay.php?fid=39
/*初始字符串*/
void creat(string *s)
{
char s1[MAXLen];
printf("请输入初始化字符串:\n");
scanf("%s",s1);
s->len=strlen(s1);
strcpy(s->str,s1);
}
/*输出字符串*/
void display(string *s)
{
int i;
printf("生成的字符串为:\n");
for(i=0;i<s->len;i++)
printf("%c",s->str[i]);
printf("\n");
}
/*求子串*/
void substring(string *s,int pos,int len)//pos从1到len
{
int i;
string *ch;
ch=(string *)malloc(sizeof(string));
ch->str[0]='\0';
ch->len=0;
if(pos<=0||pos>s->len-1||len<0||pos+len-1>s->len)//程序填空①
{
printf("输入数据非法,无法取出子串!\n");
}
else
{
pos=pos-1;
for(i=0;i<len;i++)
{
ch->str[i]=s->str[pos+i];
}
ch->len=len;
printf("取出的字符串为:\n");
for(i=0;i<ch->len;i++)
printf("%c",ch->str[i]);
printf("\n");
}
}
/*插入子串*/
string * insert(string *s,int pos,string *t)//pos插入位置可从1到len+1
{
int k;
string *ch;
ch=(string *)malloc(sizeof(string));
ch->str[0]='\0';
ch->len=0;
pos=pos-1;
for(k=0;k<pos;k++)//程序填空② 移动s->pos
{
ch->str[k]=s->str[k];
}
for(k=0;k<t->len;k++)//程序填空③ 移动 t
{
ch->str[pos+k]=t->str[k];
}
for(k=0;k<(s->len-pos);k++)//程序填空④ 移动s->pos之后的
{
ch->str[pos+t->len+k]=s->str[pos+k];
}
ch->len=s->len+t->len;
*s=*ch;
return s;
}
/*删除子串*/
string *delet(string *s,int pos,int len)//pos删除位置可从1到len
{
int k;
string *ch;
ch=(string *)malloc(sizeof(string));
ch->str[0]='\0';
ch->len=0;
if(pos<1||pos>s->len ||len <0||len>s->len-pos+1)
return ch;
else
{ //程序填空⑤
for(k=0;k<len;k++)
{
s->str[pos-1+k]=s->str[pos-1+len+k];
}
s->len=s->len-len;
return s;
}
}
/*连接串*/
string * concat(string *s,string *t)
{
int i;
string *ch;
ch=(string *)malloc(sizeof(string));
ch->len=s->len+t->len;
for(i=0;i<s->len;i++) //程序填空⑤
{
ch->str[i]=s->str[i];
}
for(i=0;i<t->len;i++)
{
ch->str[s->len+i]=t->str[i];
}
*s=*ch;
return s;
}
void main()
{
int k,m,n;
string *str;
printf("*******第一次使用,请先初始化字符串*******\n");
do{
printf("------1、生成字符串\n");
printf("------2、取子串\n");
printf("------3、插入子串\n");
printf("------4、删除子串\n");
printf("------5、联接串\n");
printf("------6、退出程序\n");
printf("***********************\n");
printf("请输入你的选择(1、2、3、4、5、6):\n");
scanf("%d",&k);
switch(k){
case 1:{
str=(string *)malloc(sizeof(string));
creat(str);
display(str);
}break;
case 2:{
printf("从第POS个字符起:\n");
scanf("%d",&m);
printf("取长度为LEN的子串:\n");
scanf("%d",&n);
substring(str,m,n);
}break;
case 3:{
printf("注意插入串的位置在第1个到第%d个字符之间:\n",str->len+1);
scanf("%d",&m);
if(m>=0&&m<=str->len+1)
{
string *t;
t=(string *)malloc(sizeof(string));
printf("要插入的子串为:\n");
scanf("%s",t->str);
t->len=strlen(t->str);
display(insert(str,m,t));
}
else
printf("插入位置非法,插入失败!\n");
}break;
case 4:{
string *t;
t=(string *)malloc(sizeof(string));
printf("从第POS个字符起:\n");
scanf("%d",&m);
printf("取长度为LEN的子串:\n");
scanf("%d",&n);
t=delet(str,m,n);
if(t->len==0)
{
printf("位置非法,删除失败!\n");
}
else display(t);
}break;
case 5:{
string *t;
t=(string *)malloc(sizeof(string));
printf("要联接的字符串为:\n");
scanf("%s",t->str);
t->len=strlen(t->str);
display(concat(str,t));
}break;
case 6:{
printf("***********再见!************\n");
printf("******按任意键退出程序*******\n");
exit(0);
}break;
default:break;
}//end switch
getchar();
getchar();
system("cls");
}
while(k<6);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?