为什么会出现中文乱码

img

#include <iostream>
#include <cstring>
using namespace std;

class String 
{
private:
    char *ptr;
public:
    String()//构造函数
    {
        ptr = NULL;
    }
    String(const char * s)//构造函数,用字符串s初始化
    {
        ptr=new char[strlen(s)+1];
        strcpy(ptr,s);
    }
    String(const String& s)//拷贝构造函数
    { 
        if(!s.ptr)
        {
            ptr=NULL;
            return;
        }
        ptr=new char[strlen(s.ptr)+1];
        strcpy(ptr,s.ptr);
    }
    void concat(const String  &s)//将字符串s连接到当前字符串后
    {
        char* str=new char[strlen(ptr)+strlen(s.ptr)+1];
        int i;
        for (i=0;i<strlen(ptr);i++)
        {
            str[i]=ptr[i];
        }
        for (int j=0;i<strlen(ptr)+strlen(s.ptr)+1;i++,j++)
        {
            str[i] = s.ptr[j];
        }
        ptr=str; 
    }
    String substring(int begin,int len)
    {
        char *str=new char[len+1];
        for(int i=0;i<len;i++)
        {
            str[i]=ptr[begin+i];
        }
        return str;
    }
 
    String& operator=(const String &s)//赋值运算符    
    {
        if (this == &s)    return *this;
        delete []ptr;
        ptr = new char[strlen(s.ptr) + 1];
        strcpy(ptr, s.ptr);
        return *this;
    }
    int length()const //返回字符串长度 
    {
        int len=strlen(ptr);
        return len;
    }
    void print()const //输出字符串
    {
        if(ptr!=NULL)
            cout<<ptr<<endl; 
    }
    ~String()//析构函数
    {
        if(ptr) delete []ptr;
    }
};
int main()
{
    String s1("hello");
    String s2(s1);
    String s3;
    s1.print();
    s2.print();
    s3.print();
    s1 = "good morning ";
    s2 = "beijing";
    (s3=s2)=s1;
    cout << s1.length() << endl;
    cout << s2.length() << endl;
    cout << s3.length() << endl;
    s1.print();
    s2.print();
    s3.print();
    s1.concat(s2);
    s1.print();
    s2.print();
    String s4;
    s4 = s2.substring(2,3);
    s4.print();
    s4 = s2.substring(2,15);
    s4.print();
    return 0;
}

同问