串的定长顺序存储表示是一种类似于线性表的顺序存储结构,用一组地址连续的存储单元存储串值的字符序列。
在实现时主要实现以下功能:
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<iostream> 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; ++i) { T[i] = s1[i]; } for(int j=0; j<s2_length; ++j) { T[i+j] = s2[j]; } T[i+j] = '\0'; return true; } else if(t_length>s1_length && t_length<s1_length+s2_length) { for(int i=0; i<s1_length; ++i) { T[i] = s1[i]; } for(int j=0; j<t_length-s1_length; ++j) { T[i+j] = s2[j]; } T[i+j] = '\0'; return false; } else if(t_length < s1_length) { for(int i=0;i<t_length;++i) { T[i] = s1[i]; } T[i] = '\0'; } return true; } void PrintString(char T[]) { cout<<T<<endl; } bool StringAssign(SString T,const char str[]) { for(int i=0;str[i] != '\0';++i) { T[i] = str[i]; } T[i] = '\0'; return true; } bool StrCopy(SString T, SString s) { int t_length = MAX_STRING_SIZE; int s_length = Length(s); if(s_length <= t_length) { for(int i = 0;i < s_length;++i) { T[i] = s[i]; } T[i] = '\0'; } else { for(int i = 0;i < t_length;++i) { T[i] = s[i]; } T[i] = '\0'; } return true; } bool StrEmpty(SString T) { if(Length(T) == 0) { cout<<"串为空"<<endl; return true; } else { cout<<"串不为空"<<endl; return false; } } int StrCompare(SString T,SString T1) { for(int i=0,j=0;i<Length(T),j<Length(T1);++i,++j) { if(T[i]-'0' > 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);++i) { T[i] = S[i]; } T[i]='\0'; } else { for(int i=pos-1;i<pos+len-1;++i) { T[i] = S[i]; } T[i]='\0'; } return true; } bool StrInsert(SString S,int pos,SString T) { if(pos < 1 || pos > 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<<"前串大于后串"<<endl; } else if(StringAssign(s1,s2)==0) { cout<<"前串等于后串"<<endl; } else { cout<<"前串小于后串"<<endl; } ClearString(T); StrEmpty(T); }
希望大家能够指出我的不足,谢谢~我会努力改进的。
原文地址:http://blog.csdn.net/qaz3171210/article/details/45809457