串的定长顺序存储结构

串操作C语言实现

 

1.实验所涉及的知识点

(1).串是类似于线性表的顺序存储结构

(2).串的定长,初始化

(3).字符串插入指定串的位置

(4).联接字符串。

 

(5).求字串

 

2.程序源码

#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define max 10
typedef unsigned char Sstring[max+1];
int Str_insert(Sstring S,Sstring T,int n)//字符串插入到指定位置,n为S的数组长度
{
	int m,k;//m为T的数组长度,k为插入的位置
	int i=0;
	Sstring S1;//新的字符数组
	for(int i=0;i<max;i++)
	{
		if(T[i]=='/0')
			break;
		else
			m=i+1;
	}
	printf("请输入要插入的位置:");
	scanf_s("%d",&k);
	for(int i=0;i<k;i++)
	{
		S1[i]=S[i];//S[i]的n之前的字符串赋值给S1[n]的数组
	}
	    if(m+n<=max)
		{
			for(int i=0;i<m;i++)
			   S1[i+k]=T[i];//插入的字符串T[i]赋值给S1[i+n]
			for(int i=0;i<n-k;i++)//将S剩下的字符串赋给S1
			{
				S1[k+m+i]=S[i+1];
			}
			printf("插入后的字符串为:");
			for(int i=0;i<(n+m);i++)
				printf("%c",S1[i]);
			printf("/n");
		}
		else
		{
			for(int i=0;i<m;i++)
			{
				S1[i+k]=T[i];//插入的字符串T[i]赋值给S1[i+n]
			}
			printf("插入后的字符串为:");
		    for(int i=0;i<max;i++)
			printf("%c",S1[i]);
			printf("/n");
		}
	return 0;
}
int Str_contract(Sstring S,Sstring P,int n)//联接字符串
{
	Sstring S1;
	int m;
	for(int i=0;i<max;i++)
	{
		if(P[i]=='/0')
			break;
		else
			m=i+1;
	}
	for(int i=0;i<n;i++)
	{
		S1[i]=S[i];
	}
	for(int i=0;i<m;i++)
	{
		if(n+m<max)
			S1[n+i]=P[i];
		else
		{
			printf("超过最大长度!!/n");
			break;
		}
	}
	printf("联接后的字符串:");
	for(int i=0;i<(n+m);i++)
	  printf("%c",S1[i]);
    printf("/n");
	return 0;
}
int Str_sub(Sstring S,int j,int k)//求子串
{
	Sstring S1;
	int i=0;
	for(int i=0;i<k;i++)
		S1[i]=S[i+j-1];
	printf("子串为:");
	while(i<k)
	{
		printf("%c",S1[i]);
		i++;
	}
	printf("/n");
	return 0;
}
int Str_printf(Sstring S,int n)//输出S
{
	printf("字符串为:");
	for(int i=0;i<n;i++)
		printf("%c",S[i]);
	printf("/n");
	return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
	Sstring S;
	Sstring T;
	Sstring P;
	int n,j,k;//n为字符数组S的长度
	printf("--------串的定长顺序存储结构--------/n");
	printf("1.请输入字符串:");
	scanf("%s",S);
	for(int i=0;i<max;i++)
	{
		if(S[i]=='/0')
			break;
		else
			n=i+1;
	}
	Str_printf(S,n);
	printf("长度为:%d/n",n); 
	printf("2.请输入要插入的新字符串:");
	scanf("%s",T);
	Str_insert(S,T,n);
	printf("3.请输入要链接的字符串:");
	scanf("%s",P);
	Str_contract(S,P,n);
	printf("4.求子串!!/n");
	printf("请输入你要截取的位置:");
	scanf("%d",&j);
	printf("请输入你要截取的长度:");
	scanf("%d",&k);
	Str_sub(S,j,k);
	system("pause");
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值