最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

C++实现字符串

来源:动视网 责编:小OO 时间:2025-10-02 10:44:18
文档

C++实现字符串

9字符串【实验简介】字符串是由零个或多个字符的顺序排列所组成的数据结构,字符串在计算机处理中使用非常广泛。通过本次实验理解字符串运算的原理,掌握主要算法的实现。【实验内容】建立字符串类,并实现求子串、字符串赋值、字符串连接等运算符重载函数,实现字符串的模式匹配功能。编写一个能够统计字符串中各个字符出现频度的函数。【主要代码】#includeconstdefaultSize=128;#includeclassAString{public:AString(intsz=defaultSize);//
推荐度:
导读9字符串【实验简介】字符串是由零个或多个字符的顺序排列所组成的数据结构,字符串在计算机处理中使用非常广泛。通过本次实验理解字符串运算的原理,掌握主要算法的实现。【实验内容】建立字符串类,并实现求子串、字符串赋值、字符串连接等运算符重载函数,实现字符串的模式匹配功能。编写一个能够统计字符串中各个字符出现频度的函数。【主要代码】#includeconstdefaultSize=128;#includeclassAString{public:AString(intsz=defaultSize);//
9 字符串

【实验简介】字符串是由零个或多个字符的顺序排列所组成的数据结构,字符串在计算机处理中使用非常广泛。通过本次实验理解字符串运算的原理,掌握主要算法的实现。

【实验内容】

建立字符串类,并实现求子串、字符串赋值、字符串连接等运算符重载函数,实现字符串的模式匹配功能。编写一个能够统计字符串中各个字符出现频度的函数。

【主要代码】

#include

const defaultSize=128;

#include

class AString

{  public:

        AString(int sz=defaultSize);//构造函数,构造一个最大长度为sz,实际长度为0的字符串

        AString( char *init);//构造函数,构造一个最大长度为maxsize,由init初始化的新字符串对象

     void output(){cout<        AString  ( AString& ob);//拷贝构造函数

        ~AString(){ delete []ch ;} //  析构函数                      // 

        int Length()const { return curLength;}//返回*this的实际长度

        AString  operator()(int pos,int len);//求子串

        int operator==(AString& ob) {return strcmp(ch ,ob.ch)==0;}//判断传是否相等

        int operator!=(AString& ob) {return strcmp(ch ,ob.ch)!=0;}

        int operator!(){return curLength==0;};//

        AString& operator=(AString& ob);//串赋值

        AString& operator+=(AString& ob);//串连接

        char operator[]( int i);//取当前串的第i的字符

        int Find(AString pat,int k);//简单模式的匹配算法,返回第一次匹配成功的位置)*/

        void frequency(char *p);//统计各种字符出现的次数   

        char *ch;//串存放数组

private:

        int curLength;//串实际长度

        int maxSize;//存放数组的最大长度

};

AString ::AString(int sz)

{     maxSize=sz;

     ch=new char[ maxSize+1];

     curLength=0;ch[0]='\\0';

}

AString::AString( char * init)

{    int len=strlen(init);

maxSize=(len>defaultSize)?len:defaultSize;

    ch=new char[maxSize+1];

    curLength=len;

    strcpy(ch,init);

}

AString::AString (AString& ob)//字符串的复制构造函数

{    maxSize=ob.maxSize;

    ch=new char[maxSize+1];

    strcpy(ch,ob.ch);

}

AString   AString::operator()(int pos ,int len)//求子字符串

{    AString temp;

if (pos<0||pos+len-1>=maxSize||len<0)

    {        temp.curLength=0; temp.ch[0]='\\0';    }

    else {

     if(pos+len-1>=curLength) len=curLength-pos;

        temp.curLength=len;

     for (int i=0,j=pos;j            temp.ch[i]=ch[j];

//    temp.ch[len]='\\0';

    }

    return *this;

}

AString & AString::operator=(AString& ob)

{    if (&ob!=this)

    {    delete[]ch;

        ch= new char[maxSize+1];

        curLength=ob.curLength;

        strcpy(ch,ob.ch);

    }

else cout<<"字符串自身赋值出错!\\n";

    return *this;

}

AString & AString::operator+=(AString & ob)

{    char *temp=ch;

    int n=curLength+ob.curLength ;

int m=(maxSize>=n)?maxSize:n;

    ch =new char[m];

    maxSize=m;

    curLength=n;

    strcpy(ch,temp);

    strcat(ch,ob.ch);

    delete []temp;

    return *this;

}

char AString::operator[](int i)//字符串重载操作:取当前的字符串*this的第n个字符

{ if ( i<0 || i>=curLength )

    return ch[i];

}

int AString::Find(AString pat,int k)

{    int i,j;

for(i=k;i<=curLength-pat.curLength;i++)

    {     for(j=0;j            if(ch[i+j]!=pat.ch[j]) break;

            if(j==pat.curLength) return i;

    }    return -1;

}

void AString::frequency(char *p)

{    int k[27]={0};

    for(int i=0;p[i]!='\\0';i++)

    { if(p[i]>'z'||p[i]<'A')

        k[0]++;

        else if(p[i]=='a'||p[i]=='A')k[1]++;

        else if(p[i]=='b'||p[i]=='B')k[2]++;

        else if(p[i]=='c'||p[i]=='C')k[3]++;

        else if(p[i]=='d'||p[i]=='D')k[4]++;

        else if(p[i]=='e'||p[i]=='E')k[5]++;

        else if(p[i]=='f'||p[i]=='F')k[6]++;

        else if(p[i]=='g'||p[i]=='G')k[7]++;

        else if(p[i]=='h'||p[i]=='H')k[8]++;

        else if(p[i]=='i'||p[i]=='I')k[9]++;

        else if(p[i]=='j'||p[i]=='J')k[10]++;

        else if(p[i]=='k'||p[i]=='K')k[11]++;

        else if(p[i]=='l'||p[i]=='L')k[12]++;

        else if(p[i]=='m'||p[i]=='M')k[13]++;

        else if(p[i]=='n'||p[i]=='N')k[14]++;

        else if(p[i]=='o'||p[i]=='O')k[15]++;

        else if(p[i]=='p'||p[i]=='P')k[16]++;

        else if(p[i]=='q'||p[i]=='Q')k[17]++;

        else if(p[i]=='r'||p[i]=='R')k[18]++;

        else if(p[i]=='s'||p[i]=='S')k[19]++;

        else if(p[i]=='t'||p[i]=='T')k[20]++;

        else if(p[i]=='u'||p[i]=='U')k[21]++;

        else if(p[i]=='v'||p[i]=='V')k[22]++;

        else if(p[i]=='w'||p[i]=='W')k[23]++;

        else if(p[i]=='x'||p[i]=='X')k[24]++;

        else if(p[i]=='y'||p[i]=='Y')k[25]++;

        else//(p[i]=='z'||p[i]=='Z')    k[26]++;

    }

    char m[]={"abcdefghlijkmnopqrstuvwxyz"};

for(int j=0;j<27;j++)

    {    if(j==0) cout<<"非字符"<<"出现次数为:"<    if(k[j]!=0&&j!=0)

cout<<"字符"<    }

}

void main()

{      AString hyb_a("“Great mind think alike!”");

cout<<"hyb_a字符是:"< hyb_a.output();cout< cout<<"hyb_a字符串的长度为:"<    AString hyb_b(hyb_a);

    int n=hyb_a==hyb_b;//==判断hyb_a,hyb_b是否相等

cout<<"新建对象hyb_b,并用hyb_a初始化,判断hyb_a与hyb_b是否相等(等返回1,不等返回0):";

cout< cout<      AString hyb_c(":Said Hong Yongbo.");//新建对象hyb_c

cout<<"新建对象hyb_c;";

    hyb_c.output(); cout<    hyb_b+=(hyb_c);//

cout<<"连接hyb_b,hyb_c.保存在hyb_b中:"<    hyb_b.output(); cout<    AString hyb_d=hyb_b;//新建对象hyb_d,并用hyb_b初始化

cout<<"新建对象hyb_d,并用hyb_b初始化:"<    hyb_d.output(); cout< cout<<"取hyb_d的前一至五个字符为hyb_e:";

AString hyb_e=hyb_d.operator()(2,6);cout<    hyb_e.output(); cout< cout<<"hyb_e的第八个字符是:";

cout<    int m=hyb_c.Find("Hong Yongbo",0);

cout<<"“Hong Yongbo”在hyb_b中找首次出现的位置是:"< cout< cout<<"字符串hyb_b中各种字符出现的次数为(不区分大小写):"<    hyb_c.frequency(hyb_b.ch);

    

}

【实验过程】

【实验体会】

字符串实验我也单独的写了两天,由于字符串没怎么学,所以就照抄课本上的程序,发现有很多错误之处,也有些函数没必要,显得有些故弄玄虚,该合并的合并不更好吗?题目要求求个字符出现的频率,从别的课本查到frequency(char *p)函数计算,显得有些繁琐,觉得还有改进空间,设想写两个for()语句,几经尝试还是失败了。程序中有好些运算符重载,这是以前我都不看不学的,这次狠狠的学习了,不是一般的难。这个程序存在的问题是:

“取hyb_d的前一至五个字符为hyb_e:

“Great mind think alike!”:Said Hong Yongbo.

hyb_e的第八个字符是:m

 “Hong Yongbo”在hyb_b中找首次出现的位置是:6”

取前五个字符时就去了整个字符串,字符串匹配时hyb_b中位置并不是6,调试了好些时间,还是以失败告终。诚然还有些瑕疵,但也不失为小的成功,有待继续进

文档

C++实现字符串

9字符串【实验简介】字符串是由零个或多个字符的顺序排列所组成的数据结构,字符串在计算机处理中使用非常广泛。通过本次实验理解字符串运算的原理,掌握主要算法的实现。【实验内容】建立字符串类,并实现求子串、字符串赋值、字符串连接等运算符重载函数,实现字符串的模式匹配功能。编写一个能够统计字符串中各个字符出现频度的函数。【主要代码】#includeconstdefaultSize=128;#includeclassAString{public:AString(intsz=defaultSize);//
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top