码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-05-29 20:26:59      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:

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

//头文件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;
}


 

 

 

技术分享

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

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

标签:

原文地址:http://blog.csdn.net/zr1076311296/article/details/46239511

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!