文档介绍:字符串(String)
字符串是 n ( 0 ) 个字符的有限序列,
记作 S : “”
其中,S 是串名字
“”是串值
ci 是串中字符
n 是串的长度。
例如, S = “Tsinghua University”
const int maxLen = 128;
class String {
int curLen; //串的当前长度
char *ch; //串的存储数组
public:
String ( const String& ob );
String ( const char * init );
String ( );
~String ( ) { delete [ ] ch; }
字符串抽象数据类型和类定义
int Length ( ) const { return curLen; }
//求当前串*this的实际长度
String &operator ( ) ( int pos, int len );
//取*this从pos开始len个字符组成的子串
int operator == ( const String &ob )
{ return strcmp (ch, ) == 0; }
//判当前串*this与对象串ob是否相等
int operator != ( const String &ob )
const { return strcmp (ch, ) != 0; }
//判当前串*this与对象串ob是否不等
int operator ! ( )
const { return curLen == 0; }
//判当前串*this是否空串
String &operator = (String &ob);
//将串ob赋给当前串*this
String &operator += (String &ob);
//将串ob连接到当前串*this之后
char &operator [ ] ( int i );
//取当前串*this的第 i 个字符
int Find ( String& pat ) const;
}
String :: String ( const String& ob ) {
//复制构造函数:从已有串ob复制
ch = new char[maxLen+1]; //创建串数组
if ( ch == NULL ) {
cerr << “存储分配错! \n”;
exit(1);
}
curLen = ; //复制串长度
strcpy ( ch, ); //复制串值
}
字符串部分操作的实现
String :: String ( const char *init ) {
//复制构造函数: 从已有字符数组*init复制
ch = new char[maxLen+1]; //创建串数组
if ( ch == NULL ){
cerr << “存储分配错! \n”;
exit(1);
}
curLen = strlen ( init ); //复制串长度
strcpy ( ch, init ); //复制串值
}
String :: String ( ) {
//构造函数:创建一个空串
ch = new char[maxLen+1]; //创建串数组
if ( ch == NULL ) {
cerr << “存储分配错!\n”;
exit(1);
}
curLen = 0;
ch[0] = ‘\0’;
}
提取子串的算法示例
pos+len -1 pos+len -1
curLen-1 curLen
i n f i n i t y
i n f i n i t y
pos = 2, len = 3
pos = 5, len = 4
f i n
i t y
超出
String& String :: operator ( ) (int pos, int len) {
//从串中第 pos 个位置起连续提取 len 个字符
//形成子串返回
String * temp = new String; //动态分配
if (pos<0 || pos+len-1 >= maxLen || len<0) {
temp->curLen = 0; //返回空串
temp->ch[0] = '\0';
}
else { //提取子串
if ( pos+len -1 >= curLen )
len = curLen - pos;
temp->curLen = len; //子串长度
fo