设为首页 加入收藏

TOP

串的定长顺序存储表示
2015-11-21 01:02:03 来源: 作者: 【 】 浏览:2
Tags:顺序 存储 表示

串的定长顺序存储表示是一种类似于线性表的顺序存储结构,用一组地址连续的存储单元存储串值的字符序列。

在实现时主要实现以下功能:

int Length(SString s); //串长

bool StringConcat(SString T, SString s1, SString s2);//用T返回s1和s2连接的串

void PrintString(char T[]); //输出

bool StringAssign(SString T,const char str[]); //生成值为str的串

bool StrCopy(SString T, SString s); //将s拷贝到T

bool StrEmpty(SString T); //判空

int StrCompare(SString T,SString T1); //比较

void ClearString(SString T); //清除

bool SubString(SString T,SString S,int pos,int len); //返回子串

bool StrInsert(SString S,int pos,SString T); //插入

bool StrDelete(SString S,int pos,int len); //删除

?

但是对于Replace()函数和Index()函数我仍有不懂得地方,故这里不进行编写。

?

具体的代码如下:

头文件:

?

#pragma once

#include
  
   
using namespace std;


#define MAX_STRING_SIZE 8

typedef char SString[MAX_STRING_SIZE+1];

int Length(SString s);                               //串长

bool StringConcat(SString T, SString s1, SString s2);//用T返回s1和s2连接的串

void PrintString(char T[]);                          //输出

bool StringAssign(SString T,const char str[]);       //生成值为str的串

bool StrCopy(SString T, SString s);                  //将s拷贝到T

bool StrEmpty(SString T);                            //判空

int StrCompare(SString T,SString T1);                //比较

void ClearString(SString T);                         //清除

bool SubString(SString T,SString S,int pos,int len); //返回子串

bool StrInsert(SString S,int pos,SString T);         //插入
 
bool StrDelete(SString S,int pos,int len);           //删除

  


?

函数声明:

?

#include "String.h"

int Length(SString s)
{
	return strlen(s);
}

bool StringConcat(SString T, SString s1, SString s2)
{
	int t_length = MAX_STRING_SIZE;
	int s1_length = Length(s1);
	int s2_length = Length(s2);

	if(t_length >= s1_length+s2_length)
	{
		for(int i=0; i
  
   s1_length && t_length
   
     T1[j]-'0') { return 1; } else if(T[i]-'0' == T1[j]-'0') { return 0; } else { return -1; } } exit(-1); } void ClearString(SString T) { T[0] = '\0'; } bool SubString(SString T,SString S,int pos,int len) { if(pos > Length(S) || pos < 1 || len < 0 ) { return false; } else if(len > Length(S)-pos+1) { cout<<"无法返回,返回原始字符串:"; for(int i=pos-1;i
    
      Length(S)+1) { return false; } else { for(int i = Length(S);i>=pos-1;--i) { S[i+Length(T)] = S[i]; } for(i = 0;i < Length(T);++i) { S[pos+i-1] = T[i]; } } return true; } bool StrDelete(SString S,int pos,int len) { if(pos < 0 || pos > Length(S)|| len < 0) { return false; } else if(pos > Length(S)-len+1) { S[pos-1] = '\0'; } else { for(int i = pos+len;i <= Length(S)-1;++i) { S[i-len] = S[i]; } S[Length(S)-len] = '\0'; } return true; }
    
   
  


?

测试文件:

?

#include"String.h"

void main()
{
	SString T;
	char str[] = "bit";
	SString s1 = "hello";
	SString s2 = "world";
	StrInsert(s1,2,s2);
	PrintString(s1);
	SubString(T,s1,1,6);
	PrintString(T);
	StringConcat(T,s1,s2);
	PrintString(T);
	StrCopy(T,s1);
	PrintString(T);
	StringAssign(T,str);
	PrintString(T);
	StrDelete(s2,1,1);
	PrintString(s2);
	StrEmpty(T);
	if(StringAssign(s1,s2)==1)
	{
		cout<<"前串大于后串"<
  
   

?

希望大家能够指出我的不足,谢谢~我会努力改进的。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇POJ 2576 Tug of War 下一篇求数组中出现一次的数字

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: