首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

求诸位C++大神相助啊 关于Mystring类

2013-12-11 
求各位C++大神相助啊关于Mystring类代码如下:main.cpp#include MyString.hvoid main( ){MyString s1MyS

求各位C++大神相助啊 关于Mystring类
代码如下:
main.cpp
#include "MyString.h"
void main( )
{
MyString s1;
MyString s2;
MyString s3;
MyString s4("abcdef");
cin>>s1>>s2;
s3=s1+s2;//调试发现这一行中“=”的重载,并未将“+”重载的结果结果赋值给S3。发现S3最后结果为几个汉字和问号,当输入S1为,S2为b时。请各位大神相助一下啊
cout<<s3<<endl;
for(int i=0;i<s3.length();i++)
cout<<s3[i];
cout<<endl;
//比较两个字符串的大小,按字符顺序
if(s1>s2)
cout<<s1<<"is more lager than "<<s2<<endl;
//输出s4在s3中位置
cout<<s3.find(s4);
}
MyString.h
#include<iostream>
#include<cstring>
using namespace std;
class MyString
{
public:
MyString();
MyString(const char *str); 
    MyString(const MyString &other); 
    bool operator>(const MyString& str);
    MyString operator+(const MyString& str) const;
MyString& operator=(const MyString &str);
char operator[](int order);
    friend ostream& operator<< (ostream&os,MyString&str)
{
os<<str.m_data;
return os;
}
    friend istream& operator>>(istream &input,MyString &str)
{
input>>str.m_data;
return input;
}
int find(MyString str);
int length(){return len;}
    void Display(); 
    ~MyString(){delete []m_data;}
private:
    char * m_data;
    int len;
};
MyString.cpp

#include"MyString.h"
#include <stdio.h>
MyString::MyString()
{
m_data=new char[1];
//char *s="\0";
//memcpy(m_data,s,1);
m_data[0]=0;
len=0;
}
MyString::MyString(const char *str)
{
if(str==NULL)
{
m_data=new char[1];
m_data[0]=0;
len=0;
}
else
{
m_data=new char[strlen(str)+1];
strcpy(m_data,str);
len=strlen(str)+1;
}
}
MyString::MyString(const MyString &other)
{
int n=len=other.len;
if(m_data=new char[n+1])
{
for (int i=0;i<n;i++)
m_data[i]=other.m_data[i];
}
else
cout<<"error"<<endl;
}



bool MyString::operator>(const MyString& str)
{
   // if(len>str.len)len=str.len;
//for(int i=0;i<len;i++)
//{
//if(m_data[i]>str.m_data[i])
//return true;
//else
//return false;
return strcmp(m_data,str.m_data)>0;
//}
}
MyString& MyString::operator=(const MyString &str)
{
delete []m_data;
m_data=new char[strlen(str.m_data)+1];
strcpy(m_data,str.m_data);
return *this;
}
char MyString::operator[](int order)
{
if(order<len)
return m_data[order];
else
{
   cout<<"下标越界!:";
   return m_data[0];  
}
}
void MyString::Display()
{
printf("%s\n",m_data);
}
int MyString::find(MyString str)
{


if(strstr(m_data,str.m_data) != NULL)
{
for(int i=0;i<len;i++)
{
if(m_data[i] == str.m_data[0])
{
bool IsEqual = true;
for(int j= 1;j<str.len;j++)
{
if(str.m_data[j] != m_data[i+j])
{
IsEqual = false;
break;
}
}
if(IsEqual == true)
return i;
}
}
}
return -1;
}
MyString MyString::operator+(const MyString& str) const
{
 MyString newstring;
 if(!str.m_data)
 newstring=*this;
 else if(!m_data)
 newstring=str;
 else
 {
 newstring.m_data=new char[strlen(m_data)+strlen(str.m_data)+1];
 strcpy(newstring.m_data,m_data);
 strcat(newstring.m_data,str.m_data);
 }

     return newstring;
 }

[解决办法]
 MyString operator+(const MyString& str) const;
MyString& operator=(const MyString &str);



额,楼主为什么你的编程风格跟我的不一样呢?除了=,一般的重载运算符要用friend吧:

friend MyString operator +(const MyString& left, const MyString& right);
而=应该是一个空的成员函数:
void operator =(const MyString& right_side);
[解决办法]
求诸位C++大神相助啊   关于Mystring类
[解决办法]
不同意楼上一般的重载运算符要用friend。

问题出在operator+里面。
newstring初始化是一个‘\0’结尾的空串,通过拷贝和连接之后,末尾要添加一个‘\0’。

热点排行