| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 520 人关注过本帖
标题:字符串类
只看楼主 加入收藏
yangcaifei
Rank: 4
来 自:陕西
等 级:业余侠客
威 望:2
帖 子:127
专家分:216
注 册:2014-11-3
结帖率:84%
收藏
已结贴  问题点数:100 回复次数:3 
字符串类
定义字符串连接的友元函数有问题,怎么改啊
#include <iostream>
#include <string.h>
#include <assert.h>

using namespace std;

class String
{
private:
    int length;
    char* str;
public:
    String();
    String(char* str0);
    String(const String& str0);
    int size();
    friend istream& operator>>(istream& in,String& str0);
    friend ostream& operator<<(ostream& out,String& str0);
    char& operator[](int index);
    以下四个函数的实现有问题,得不到想要的结果,输出乱码
    friend String& operator+(const String& str0,const String& str1);
    friend String& operator+(const String& str0,const char* str1);
    friend String& operator+=(String& str0,const String& str1);
    friend String& operator+=(String& str0,const char* str1);
    ~String();
};

String::String()
{
    length=1;
    str=new char[length+1];
    str[0]='A';
}

String::String(char* str0)
{
    int len=0;
    for(int i=0;str0[i]!='\0';i++)
    {
        len++;
    }
    length=len;
    str=new char[length+1];
    assert(str!='\0');
    strcpy(str,str0);
}

String::String(const String& str0)
{
    length=str0.length;
    str=new char[length+1];
    str=str0.str;
}

int String::size()
{
    return this->length;
}

istream& operator>>(istream& in,String& str0)
{
    in>>str0.str;
    str0.length=strlen(str0.str);
    return in;
}

ostream& operator<<(ostream& out,String& str0)
{
    out<<str0.str;
    return out;
}

char& String::operator[](int index)
{
    if(index>=0&&index<=size())
    {
        return this->str[index];
    }
}

String& operator+(const String& str0,const String& str1)
{
    String str2;
    str2.length=str1.length+str0.length;
    str2.str=new char[str2.length+1];
    strcpy(str2.str,str0.str);
    strcat(str2.str,str1.str);
    return str2;
}

String& operator+(const String& str0,const char* str1)
{
    String str2;
    str2.length=strlen(str1)+str0.length;
    str2.str=new char[str2.length+1];
    strcpy(str2.str,str0.str);
    strcat(str2.str,str1);
    return str2;
}

String& operator+=(String& str0,const String& str1)
{
    String str2;
    str2.length=str1.length+str0.length;
    str2.str=new char[str2.length+1];
    strcpy(str2.str,str0.str);
    strcat(str2.str,str1.str);
    str0=str2;
    return str0;
}

String& operator+=(String& str0,const char* str1)
{
    String str2;
    str2.length=strlen(str1)+str0.length;
    str2.str=new char[str2.length+1];
    strcpy(str2.str,str0.str);
    strcat(str2.str,str1);
    str0=str2;
    return str0;
}

String::~String()
{
    delete[] this->str;
}

int main()
{
    String k;
    cin>>k;
    cout<<k<<endl;
    cout<<k.size()<<endl;

    String x("ZhangQian");
    cout<<x<<endl;
    cout<<x.size()<<endl;

    String y(x);
    cout<<y<<endl;
    cout<<y.size()<<endl;

    String a="WangYun";
    cout<<a<<endl;
    cout<<a.size()<<endl;

    String b=x;
    cout<<b<<endl;
    cout<<b.size()<<endl;

    char c=x[1];
    cout<<c<<endl;
    cout<<x<<endl;

    a[2]='c';
    cout<<y<<endl;
    cout<<a<<endl;

    String aa=x+k;
    cout<<aa<<endl;
    cout<<aa.size()<<endl;

    char* ddd="SuXiaoLing";
    String dddd=k+ddd;
    cout<<dddd<<endl;
    cout<<dddd.size()<<endl;

    String zhangqian="ZhangQian";
    zhangqian+=dddd;
    cout<<zhangqian<<endl;

    zhangqian+="wangyun";
    cout<<zhangqian<<endl;
    cout<<zhangqian.size()<<endl;

    return 0;
}
搜索更多相关主题的帖子: private include public friend 字符串 
2015-06-18 12:49
yangcaifei
Rank: 4
来 自:陕西
等 级:业余侠客
威 望:2
帖 子:127
专家分:216
注 册:2014-11-3
收藏
得分:0 
输出结果
图片附件: 游客没有浏览图片的权限,请 登录注册
2015-06-18 12:51
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:100 
你完全在瞎鸡巴乱写,怎么改?

friend String& operator+(const String& str0,const String& str1); 这个函数怎么返回一个引用?

String::String(const String& str0)
{
    length=str0.length;
    str=new char[length+1];
    //str=str0.str; // 这是什么鸟玩意儿嘛?
    strcpy( str, str0.str );
}

String& operator+=(String& str0,const String& str1)
{
    String str2;
    str2.length=str1.length+str0.length;
    str2.str=new char[str2.length+1];
    strcpy(str2.str,str0.str);
    strcat(str2.str,str1.str);
    str0=str2;
    str2.str = 0; // 如果缺少这一句,str2析构时,str0.str不就成了野指针。
    return str0;
}

错误太多,自己找本书看看,或自己拿 std::string 来对比一下。
2015-06-18 13:43
yangcaifei
Rank: 4
来 自:陕西
等 级:业余侠客
威 望:2
帖 子:127
专家分:216
注 册:2014-11-3
收藏
得分:0 
回复 3楼 rjsp
谢谢大神赐教
2015-06-18 15:56
快速回复:字符串类
数据加载中...
 
   



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

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