标题:string 类的功能
只看楼主
黄昏的王座
Rank: 2
来 自:安徽亳州
等 级:论坛游民
帖 子:38
专家分:65
注 册:2011-10-5
结帖率:85.71%
已结贴  问题点数:20 回复次数:11 
string 类的功能
#include<iostream>
#include<cstring>
using namespace std;
class mystring
{
    public :
        mystring (char *n);
        mystring (int m);
        mystring ();
        mystring (mystring &Mytring);
        mystring &operator = (mystring &Mystring);
        mystring &operator + (mystring &p);
        void display();
        ~mystring();
    private :
        char *N;
        int M;
};
mystring::mystring(char *n)
{
    int len = sizeof(n);
    N = new char[len];
    strcpy(N, n);
}
mystring::mystring(int m)
{
    N = new char[m + 1];
    for (int i = 0; i < m; i++)
        N[i] = ' ';
    N[m] = '\0';
}
mystring :: mystring (mystring &Mystring ){
         M = Mystring.M;
         N = new char [M+1];
         strcpy(N,Mystring.N);
}
mystring::mystring()
{
    M = 1;
    N = new char[M];
    N[0] = '\0';

}
mystring &mystring::operator = (mystring &Mystring){
         M = Mystring.M;
         delete []N;
         N = new char [M+1];
         strcpy(N,Mystring.N);
         return *this;
}
mystring &mystring::operator + (mystring &p)
{
    char *NN;
    int MM = M;
    NN = new char[MM];
    strcpy(NN, N);
    delete []N;
    N = new char[MM + p.M + 1];
    strcpy(N, NN);
    strcat(N, p.N);
    N[MM + p.M] = '\0';
    delete[]NN;
    return *this;
}
void mystring::display()
{
    cout<<"<";
    if (N != NULL)
    cout<<N;
    cout<<">"<<endl;
}
mystring::~mystring()
{
    delete []N;
}
int main()
{
  mystring s1 ("sdfgfdgdf"), s2(5), s3, s4("nzx"), s5("liu"), s6;
  s1.display();
  s2.display();
  s3.display();
  s3 = s1;
  s3.display();
  s6 = s4 + s5;
  s6.display();
  return 0;
}





这是什么原因啊?  我是想编写一个能实现关于string 功能的类函数   可是老是出现这个问题  求大神帮忙看一下  ,  小弟感激不尽
搜索更多相关主题的帖子: class private display include public 
2011-12-01 18:24
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
得分:0 
int len = sizeof(n);你认为len的值是多少呢?是字符串的长度还是4呢?好好理解一下~!

还有就是要提醒一下:重载+运算符不应改变其中一个类对象中的值!

愿用余生致力编程
2011-12-01 19:27
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
得分:20 
给你的这段代码改了一下,你写的那代码真是乱七八糟!整个N和M来定义变量,并且那个M还乱七八糟的赋值!
我在改的时候把那个类名改为了CString,变量也改了个比较好的名字,同时我说一下,对运算符+进行重载的时候,不要去改变其中一个类对象中的变量值,这些问题我都给你改了一下!

这是改后的代码:

程序代码:
#include<iostream>
#include<cstring>
using namespace std;

class CString
{
    public :
        CString(char *);
        CString(int);
        CString();
        CString(CString &);
        CString & operator =(CString &);
        CString operator +(CString &);
        void display();
        ~CString();
    private :
        char *pstr;
        int size;
};

CString::CString(char *p)
{
    size = strlen(p);
    pstr = new char[size+1];
    if(pstr)
        strcpy(pstr, p);
}

CString::CString(int len)
{
    size = len;
    pstr = new char[size+1];
    for(int i = 0; i < size; i++)
        pstr[i] = ' ';
    pstr[i] = '\0';
}

CString::CString(CString &cs)
{
    size = cs.size;
    pstr = new char[size+1];
    if(pstr)
        strcpy(pstr, cs.pstr);
}

CString::CString()
{
    size = 1;
    pstr = new char[size];
    pstr[0] = '\0';

}

CString & CString::operator =(CString &cs)
{
    size = cs.size;
    pstr = new char[size+1];
    strcpy(pstr, cs.pstr);
    return *this;
}

CString CString::operator +(CString &cs)
{
    CString temp;
    temp.size =  size + cs.size;
    temp.pstr = new char[strlen(pstr)+strlen(cs.pstr)+1];
    if(temp.pstr)
    {
        strcpy(temp.pstr, pstr);
        strcat(temp.pstr, cs.pstr);
    }
    return temp;
}

void CString::display()
{
    cout<<"<";
    if(pstr)
        cout<<pstr;
    cout<<">"<<endl;
}

CString::~CString()
{
    delete []pstr;
}

int main()
{
    CString s1("sdfgfdgdf"), s2(5), s3, s4("nzx"), s5("liu"), s6;
    s1.display();
    s2.display();
    s3.display();
    s3 = s1;
    s3.display();
    s6 = s4 + s5;
    s6.display();
    return 0;
}


愿用余生致力编程
2011-12-01 20:01
赵春晓
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-12-1
得分:0 
我想问你用二维堆数组数组怎么实现矩阵的求和?可以告诉我吗?谢谢了
2011-12-01 20:21
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
得分:0 
回复 4楼 赵春晓
你问谁?问楼主?

愿用余生致力编程
2011-12-01 20:43
我是菜鸟C
Rank: 4
等 级:业余侠客
帖 子:74
专家分:200
注 册:2011-3-27
得分:0 
回复 4楼 赵春晓
直接定义两个二维数组:a[M][N]和b[m][n],然后用两个for循环使得a[i][j]+b[i][j]不就ok了吗???
2011-12-02 09:16
埋首
Rank: 2
等 级:论坛游民
帖 子:24
专家分:76
注 册:2011-12-1
得分:0 
你问的是不是稀疏矩阵啊。
2011-12-02 13:26
黄昏的王座
Rank: 2
来 自:安徽亳州
等 级:论坛游民
帖 子:38
专家分:65
注 册:2011-10-5
得分:0 
回复 4楼 赵春晓
按照矩阵的运算规则,进行for循环相加就行了
2011-12-03 11:17
黄昏的王座
Rank: 2
来 自:安徽亳州
等 级:论坛游民
帖 子:38
专家分:65
注 册:2011-10-5
得分:0 
回复 3楼 我菜119
很感谢,谢谢你了啊;  还有一个问题  按照你改写的那种,运行的时候提示
,  如果直接写(s4+s5)就没有错误了 这是什么原因啊 难道是我的编译器的原因  我用的是code:blocks
2011-12-03 11:22
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
得分:0 
回复 9楼 黄昏的王座
你说的具体些!

愿用余生致力编程
2011-12-03 12:46



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-356708-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.265837 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved