“串”的定长顺序存储表示的实现

串——数据结构的实现——定长存储顺序。

//头文件sstring.h
#pragma once
#include<iostream>
using namespace std;
#define STRING_SIZE 20

typedef  char Sstring[STRING_SIZE+1];

int length(Sstring S)
{
  return strlen(S);
}

void StrAssign(Sstring T, char *str)
{
  int i=0;
  while(*str != '\0')
  {
     T[i++] = *str++;
  }
  T[i] = '\0';
}

bool StringConcat(Sstring T,Sstring s1,Sstring s2)
{
  int a = length(T);
  int b = length(s1);
  int c = length(s2);
  if(a>b+c)
  {
     for(int i=0;i<b;i++)
	 { T[i] = s1[i];}	
	 for(int j= b; j < b+c;j++)
	 { T[j] = s2[j];}
	 T[j] = '\0';
	return true;
  }
  else if(a>b && a<b+c)
  {
     for(int i=0;i<b;i++)
	 { T[i] = s1[i];}
	 for(int j=b;j<=STRING_SIZE;j++)
	 { T[j] = s2[j];}
	 T[j] = '\0';
	return true;
  }
  else if(a<b)
  {
     for(int i=0;i<=STRING_SIZE;i++)
	 {T[i] = s1[i];}
	 T[i] = '\0';
  }
  return true;
}

void StrCopy(Sstring T, Sstring S)
{
   int i=0;
   while(S[i] != '\0')
   {
    T[i] = S[i];
	i++;
   }
   T[i] = '\0';
}

bool StrEmpty(Sstring S)
{
   if(S[0] == '\0')
	   return false;
   return true;
}

int StrCompare(Sstring T, Sstring S)
{
   int i=0;
   while(T[i]-S[i] == 0)
   {
         i++;
   }
   if(T[i]-S[i]>0)
     return 1;
   if(T[i]-S[i]<0)
	 return -1;
   else
	 return 0;
}

void ClearString(Sstring T)
{
  int i=0;
  T[i]='\0';
}

char * SubString(Sstring T,int pos,int len,Sstring S)
{
	if(length(T)<pos+len)
		return false;
	for(int i= 0;i<len;i++)
	{
	  S[i] = T[i+pos];
	}
	S[i] = '\0';
	return S;
}

int Index(Sstring S,Sstring T,int pos)
{
	int s_len=length(S);
	int t_len=length(T);
   for(int i=pos;i<=s_len - t_len;i++)
   {
	   for(int j=0;j <= t_len;++j)
	   {
		  if(S[j+i]==T[j])
		  {
			 if(j == t_len-1)
			 {return i;}  
			 else
			 {continue;}
		  }
		  else 
			  break;
	   }  
   }
  return 0;
}


bool Replace(Sstring S,Sstring T,Sstring V)
{
  int sl=length(S);
  int tl=length(T);
  for(int i=0;i<sl-tl;i++)
  {
     for(int j=0;j <= tl;++j)
	   {
		  if(S[j+i]==T[j])
		  {
			 if(j == tl-1)
			 {
			   for(int m =0;m<tl;m++)
			   {
				   S[m+i] = V[m];
			   }
			 }  
			 else
			 {continue;}
		  }
		  else 
			break;
	   }  
  }
 return 0;
}	


bool StrInsert(Sstring S,int pos,Sstring T)
{
    //1<=pos<=length(S)+1
	int sl=length(S);
	int tl=length(T);
	if(pos>sl+1)
		return false;
	for(int i=0;i<=sl-pos;i++)
	{
	  S[sl+tl-i]=S[sl-i];
	}
    for(int j=pos;j<tl+pos;j++)
	{
		S[j] = T[j-pos];
	}
	return true;
}

bool StrDelete(Sstring S,int pos,int len)	
{
  if(pos>length(S)+1)
	 return false;
  for(int i=pos;i<length(S)-pos;i++)
  {
	  S[i]=S[i+len];
  }
  return true; 
}

void DestroyString(Sstring S)
{
   S[0]='\0';
}


主函数:

#include"sstring.h"

void main()
{
  char *str1="asdcsdhasda";
  char *str2="sd";
  char *str3="zr";
  Sstring S;
  Sstring T;
  Sstring V;
  StrAssign(S,str1);
  StrAssign(T,str2);
  StrAssign(V,str3);
  Replace(S,T,V);
  //StrInsert(S,3,T);
  //StrDelete(S,1,2);
  /*
    int ret=Index(S,T,3);
    cout<<ret<<endl;
  */
  //int ret=StrCompare(T,S);
  //StrCopy(S,T);
  //cout<<ret<<endl;
  //cout<<SubString(T,0,5,S)<<endl;
  //cout<<length(S)<<endl;
  cout<<S<<endl;
}


 

 

 

注释部分为各函数的,图片没有一一附上。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值