⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 string.c

📁 对线性表的扩充 具有连接提取字符串的功能
💻 C
字号:
#include <stdio.h>    /*顺序串*/

#define MAXSIZE 255        /*假设要处理的串的长度不会超过254*/
                            /*在本程序中数组的0元素没有使用*/
typedef struct
{	char s[MAXSIZE];
	int  len;               /*串的实际长度*/
}SeqString;

void StrAssign(SeqString* r)
/*将屏幕输入的字符串赋给字符串r*/
{
	char c;
	int i=1;
	c=getchar();
	while(c!='\n')              /* \n是回车换行符 */
	{
		r->s[i]=c;
		c=getchar();
		i++;
	}
	r->len=i-1;
}

int StrLen(SeqString* r)
{	
	return r->len;
}

int StrCat(SeqString* r1, SeqString* r2)
/*将串r2紧接着放在串r1的末尾,与r1联接起来构成一个新的串,存放于r1*/
{	int i;
	if ((r1->len+r2->len)<=MAXSIZE)
	{	for(i=1; i<=r2->len; i++)
				r1->s[r1->len+i]=r2->s[i];   /*把r2->s连接到r1->s之后*/			
		r1->len=r1->len+r2->len;
		return 1;
	}
    else 
	{
        for (i=1; i<=(MAXSIZE-r1->len); i++)  /*如果两个字符串长度和大于串的最大长度,
											  则发生截断*/
			r1->s[r1->len+i]=r2->s[i];     
		r1->len=MAXSIZE;
        return 0;
	}
}

void StrSub (SeqString* r1,SeqString* r2,int i,int piecelen) 
/*返回从串S的第i个字符开始(包括第i个字符)的长度为 piecelen 的子串*/
/* r1为主串,r2为子串,i为起始位置,piecelen为子串长度*/
{	int k;
	if (i+piecelen-1>r1->len)
	{	printf("\n\t子串超界!");
		return;
	}
    else
	{
		for(k=1; k<=piecelen; k++)
			r2->s[k]=r1->s[i+k-1];    /*把子串赋给r2*/
		r2->len=piecelen;
	}
}

int StrInsert(SeqString* r1,int i, SeqString* r2)   
/*将串T插入到串S 的第i个字符之后*/
{	int k;
	if (i>=r1->len+1 || r1->len+r2->len>MAXSIZE) 
	{
		printf("\n\t不能插入!");
		return 0;
	}    
    else if (i==0)
    {
		for (k=r1->len+r2->len; k>=r2->len+1;k--)
			r1->s[k]=r1->s[k-r2->len];
        for( k=1; k<=r2->len;k++)
            r1->s[k]=r2->s[k];
		r1->len=r1->len+r2->len;
		return 1;
    }
    else if (i==r1->len)
	{
        for (k= 1; k<= r2->len; k++)
            r1->s[r1->len+k]=r2->s[k];
		r1->len=r1->len+r2->len;
		return 1;
	}
    else
	{   for(k=r1->len;k>i;k--)
	        r1->s[r2->len+k]=r1->s[k]; /*将r后移*/
        for(k=1;k<=r2->len;k++)
	        r1->s[i+k]=r2->s[k];      /*将r1插入到r中*/
		r1->len=r1->len+r2->len;
		return 1;
     }
}

int StrDelete(SeqString* r,int i,int piecelen)
/*删除串S 中从第i个字符开始(包含第i个字符)的长度为piecelen的子串*/
{
	printf("\n\t请学生自己实现程序代码!");
}

int StrIndex(SeqString* r1,SeqString* r2) 
/*返回模式r2在主串r1中第一次出现的位置。若不存在,则函数值为零,其中r2非空*/
{
	printf("\n\t请学生自己实现程序代码!");
}

int StrReplace(SeqString* r1,int i,SeqString* r2)
/*用串r2 替换串r1中自第i个字符开始,长度与r2相等的子串*/
{
	printf("\n\t请学生自己实现程序代码!");
}

int StrCmp(SeqString* r1,SeqString* r2)
/*比较两个字符串的大小。字符的大小是由该字符在ASCII码及国标码中出现的先后次序确定,
出现在前的字符小于出现在后的字符。串的大小通常是按字典序定义*/
{
	printf("\n\t请学生自己实现程序代码!");
}

int ShowString(SeqString* r) /*显示字符串*/
{
	int i=1;
	printf("\n\t");
	for(i=1;i<=r->len;i++)
		printf("%c",r->s[i]);
	printf("\n");
}

main()
{	SeqString a,b;
    SeqString *r=&a;
    char choice;
    int i,piecelen,ch=1;
    while(ch!=0)
    {   printf("\n\n\n\n");
	    printf("\t\t\t--顺  序  串--\n");
        printf("\n      ***********************************************");
        printf("\n      *          1-----------求    串    长         *");
        printf("\n      *          2-----------连  接  字  串         *");
        printf("\n      *          3-----------取  出  子  串         *");
        printf("\n      *          4-----------删  除  子  串         *");
        printf("\n      *          5-----------插  入  子  串         *");
        printf("\n      *          6-----------模  式  匹  配         *");
        printf("\n      *          7-----------子  串  替  换         *");
        printf("\n      *          8-----------串    比    较         *");
        printf("\n      *          9-----------显    示    串         *");
        printf("\n      *          0-----------串    赋    值         *");
        printf("\n      *          #-----------退          出         *");
        printf("\n      ***********************************************");
 	    printf("\n\t请选择菜单号(0--9):");
  
	    scanf("%c",&choice);
	    getchar();  
        if (choice=='1')
		{	 
           printf("\n\t字符串的长度为:   %d",StrLen(r));

		}
	    else if (choice=='2')
		{	printf("\n\t请输入第一个字符串...");
			StrAssign(&a);
			printf("\n\t请输入第二个字符串...");
			StrAssign(&b);
			StrCat (&a, &b);
			printf("\n\t连接的结果为...");
			ShowString(&a);
		}
	    else if (choice=='3')
		{	printf("\n\t请输入主串...");
			StrAssign(&a);
			printf("\n\t请输入子串在主串中的开始位置和长度(输入格式:位置,长度)...");
			scanf("%d,%d",&i,&piecelen);getchar();
			StrSub (&a,&b,i,piecelen);
			printf("\n\t提取的子串是...");
			ShowString(&b);
		}
		else if (choice=='4')
		{
			StrDelete(r,i,piecelen);
		}
		else if (choice=='5')
		{	printf("\n\t请输入第一个字符串...");
			StrAssign(&a);
			printf("\n\t请输入第二个字符串...");
			StrAssign(&b);
			printf("\n\t请输入插入位置...");
			scanf("%d",&i);getchar();
			StrInsert(&a,i,&b);
			printf("\n\t插入后的字符串为...");
			ShowString(&a);
		}
		else if (choice=='6')
		{
			StrIndex(&a,&b); 	
		}
		else if (choice=='7')
		{
			StrReplace(&a,i,&b);
		}
		else if (choice=='8')
		{
			StrCmp(&a,&b);
		}
	    else if (choice=='9')
		{	printf("\n\t输入的字符串为:");
			ShowString(r);
		}
		else if (choice=='0')
		{	printf("\n\t请输入字符串:");
			StrAssign(r);
		}
		else if (choice=='#')
		{	ch=0;
			printf("\n\t程序结束!\n");
		}
		else printf("\n\t输入错误! 请重新输入! \n");
  }
}







⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -