• 2022-06-07
    试写出用单链表表示的字符串类及字符串结点类的定义,并依次实现它的构造函数、以及计算串长度、串赋值、判断两串相等、求子串、两串连接、求子串在串中位置等7个成员函数。要求每个字符串结点中只存放-字符。
  • 解 //用单链表表示的字符串类stringl的头文件string1.h#include const int maxLen = 300;    //字符串最大长度为300 (理论上可以无限长)class stringl {public:    stringl();    //构造空字符串    stringl ( char * obstr );    //从字符数组建立字符串    ~stringl ();     //析构函数    int Length () const { return curLen; }    //求字符串长度    stringl & operator = ( stringl& ob );    //串赋值    int operator == ( stringl& ob );    //判两串相等    char& operator [] (inti);    //取串中字符    stringl& operator ( )( int pos, int len );    //取子串    stringl& operator+= ( stringl& ob );    //串连接    int Find ( stringl& ob );    //求子串在串中位置(模式匹配)    friend ostream& operator << ( ostream& os, stringl& ob );    friend istream& operator >>( istream& is, stringl& ob );private:    ListNode*chList;    //用单链表存储的字符串    int curLen;    //当前字符串长度}//单链表表示的字符串类stringl成员函数的实现,在文件string1.cpp中#include #include "stringl.h"stringl : stringl(){    //构造函数    chList = new ListINode ( '\O' );    curLen = 0;}stringl :: stringl( char *obstr ) {    //复制构造函数    curLen= 0;    ListNode *p = chList = new ListNode ( *obstr );    while ( *obstr!= ^0' ) {    obstr++;    p= p->link = new ListNode ( *obstr );curLen++;    }}stringl& stringl :: operator = ( stringl& ob){    //串赋值    ListNode *p = ob.chList;    ListNode *q = chList = new ListNode ( p->data );    curLen = ob,curLen;    while(p->data!= °0') {    p=p->link;    q= q->link = new ListNode (p ->data );    }return *this;}int stringl :: operator == ( stringl& ob ){    //判两串相等    if( curLen != ob.curLen ) return 0;    ListNode *p = chList, *q = ob.chList;    for( inti=0;i< curLen; i++ )    if( p->data != q->data ) return 0;    else{p=p->link; q= q->link; }    return 1; }    char& stringl :: operator [] ( inti) {    //取串中字符    if(i>= 0&& i < curLen) {    ListNode *p= chList; int k= 0;    while(p != NULL &&klink; k+t; }    if(p !- NULL ) return p->data;}return'0';}stringl& stringl :: operator( )( int pos, int len ) {    //取子串    stringl temp;    if(pos>= 0&& len>= 0 && pos < curLen && pos + len- 1 < curLen){    ListNode *q, *p = chList;    for(intk=0;k< pos; k++;)p= p->link;    //定位于第pos结点.    q = temp.chList = new ListNode( p->data ); .    for(inti= 1;i< len;i++ ){    //取长度为len 的子串    p= p->link;    q= q->link = new ListNode ( p ->data );}    q->link = new ListNode(^0' );    //建立串结束符temp.curLen=len;}    else { temp.curLen= 0; temp.chList = new ListNode ('0'); }    return *temp;}    stringl& stringl :: operator += ( stringl& ob) {  //串连接     if( curLen + ob.curLen > maxLen ) len = maxLen - curLen;    else len = ob.curLen;    //传送字符数    ListNode *q = ob.chList, *p = chList;    for(intk= 0;k< curLen- l;k++;)p= p->link;    //this串的串尾.    k=0;    for(k=0;klink = new ListNode ( q->data );     q= q->link;    }    p->link = new ListNode ( '\0' ); }int stringl :: Find ( stringl& ob) {    //求子串在串中位置(模式匹配)    int slen = curLen, oblen = ob.curLen, i = slen - oblen;    stringl temp = this;    while(i>-l)    if( temp( i, oblen ) - ob ) break;   else i-- ;    return i;}

    内容

    • 0

      两个字符串相等的条件是:两串的长度相等,并且两串包含的字符相同。

    • 1

      两个字符串相等的充分必要条件是两串的长度相等且两串中对应位置的字符也相等。

    • 2

      求字符串T在字符串S中首次出现的位置称为()。 A: 串的模式匹配 B: 求子串 C: 求串的长度 D: 串的连接

    • 3

      两个字符串相等的条件是( )。 A: 两个串的长度相等 B: 两个串的长度相等,并且两个串包含的字符相同 C: 两个串包含的字符相等 D: 两个串的长度相等,并且对应位置上的字符相同

    • 4

      字符串的长度是()。? 串中不同字母的个数|串中所含字符的个数|串中所含字符的个数且字符个数大于零|串中不同字符的个数