程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 串的定長順序存儲表示

串的定長順序存儲表示

編輯:C++入門知識

串的定長順序存儲表示


串的定長順序存儲表示是一種類似於線性表的順序存儲結構,用一組地址連續的存儲單元存儲串值的字符序列。

在實現時主要實現以下功能:

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; is1_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<<"前串大於後串"<

 

希望大家能夠指出我的不足,謝謝~我會努力改進的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved