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 + -
显示快捷键?