串的定長順序存儲表示是一種類似於線性表的順序存儲結構,用一組地址連續的存儲單元存儲串值的字符序列。
在實現時主要實現以下功能:
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 #includeusing 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<<"前串大於後串"<
希望大家能夠指出我的不足,謝謝~我會努力改進的。