| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 575 人关注过本帖
标题:写string类遇到的问题
只看楼主 加入收藏
最近不在
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:204
专家分:842
注 册:2010-2-28
结帖率:95%
收藏
已结贴  问题点数:20 回复次数:5 
写string类遇到的问题
程序代码:
// wjbString.cpp: implementation of the CwjbString class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "wjbString.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CwjbString::CwjbString()
{
    m_nLength = 0;
    m_pString = NULL;
}

CwjbString::CwjbString(char * pString)
{
    if(NULL != pString)
    {
        m_nLength = Strlen(pString);
        m_pString = new char[m_nLength + 1];
        Strcpy(m_pString, pString);
    }

}

CwjbString::CwjbString(CwjbString &r)
{
    m_nLength = r.m_nLength;
    m_pString = new char[m_nLength + 1];
    Strcpy(m_pString, r.m_pString);
}

CwjbString::~CwjbString()
{
    if(NULL != m_pString)
    {
        delete [] m_pString;
        m_pString = NULL;
    }
}

void CwjbString::SetString(const char *pString)
{
    delete [] m_pString;
    m_pString = NULL;
    m_nLength = Strlen(pString);
    m_pString = new char[m_nLength + 1];
    Strcpy(m_pString, pString);
}

char * CwjbString::GetString()
{
    return m_pString;
}

int CwjbString::GetLength()
{
    return m_nLength;
}

int CwjbString::Strlen(const char *pString)
{
    int nLength = 0;
    while('\0' != *pString++)
    {
        nLength++;
    }

    return nLength;
}

char * CwjbString::Strcpy(char *pString, const char *pString1)
{
    for(int i = 0; i <= Strlen(pString1); i++)
    {
        pString[i] = pString1[i];
    }
    return pString;
}

char * CwjbString::Strcat(char *pString, const char *pString1)
{
    char *pTemp = pString;
    while('\0' != *pTemp++)
        continue;
    while('\0' != (*pTemp++ = *pString1++))
        continue;

    return pString;
}

CwjbString& CwjbString::StrLink(const char *pString, const char *pString1)
{
    int n1 = Strlen(pString);
    int n2 = Strlen(pString1);
    m_pString = new char[n1+n2+1];
    
    int i;
    for(i = 0; i < n1; i++)
    {
        m_pString[i] = pString[i]; 
    }

    for(int j = 0; j <= n2; j++)
    {
        m_pString[i+j] = pString1[j];
    }
    m_nLength = n1 + n2;

    return *this;
}

CwjbString& CwjbString::operator = (const CwjbString& a)
{
    m_nLength = a.m_nLength;
    m_pString = new char[m_nLength + 1];
    Strcpy(m_pString, a.m_pString);

    return *this;
}

CwjbString& CwjbString::operator = (const char *pString)
{
    m_nLength = Strlen(pString);
    m_pString = new char[m_nLength + 1];
    Strcpy(m_pString, pString);

    return *this;
}

CwjbString CwjbString::operator + (const CwjbString& a)
{
    CwjbString Temp;
    Temp = Temp.StrLink(m_pString, a.m_pString);

    return Temp;
}

CwjbString CwjbString::operator + (const char *pString)
{
    CwjbString Temp;
    Temp = StrLink(m_pString, pString);
    return Temp;
}

CwjbString operator + (const char *pString , const CwjbString& a)
{
    CwjbString Temp;
    Temp = Temp.StrLink(pString, a.m_pString);
    return Temp;
}


  1.主要问题:那个StrLink出了问题,该怎么纠正,自己反复变化,就是改不好。大家帮我纠正下!2.附加问题:(一直困惑着我,无法解决)strcat,就是字符连接,a += b;
那么a的内存大小需要改变,那么这个重新动态内存是由strcat重新分配,还是由外部处理。听说外部处理是一开始就给a分配多余够用的空间。可现在在写string类里,分配的空间是刚好够用的。如果是由strcat函数内部处理,那么这个动态内存,怎么释放掉,因为要返回动态内存分配的这个指针。
搜索更多相关主题的帖子: string 
2010-05-13 11:47
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:606
专家分:2499
注 册:2009-4-8
收藏
得分:14 
wjbString.h 把类的声明一起贴出来看

迭代的是人,递归的是神。
2010-05-13 12:01
最近不在
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:204
专家分:842
注 册:2010-2-28
收藏
得分:0 
程序代码:
// wjbString.h: interface for the CwjbString class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_WJBSTRING_H__ED904805_533A_417B_B726_CD2145E42A23__INCLUDED_)
#define AFX_WJBSTRING_H__ED904805_533A_417B_B726_CD2145E42A23__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class CwjbString  
{
public:
    CwjbString();
    CwjbString(char * pString);
    CwjbString(CwjbString &r);
     ~CwjbString();

    void SetString(const char *pString);
    char *GetString();
    int GetLength();

    int Strlen(const char *pString);
    char *Strcpy(char *pString, const char *pString1);
    char *Strcat(char *pString, const char *pString1);
    CwjbString& StrLink(const char *pString, const char *pString1);

    CwjbString& operator = (const CwjbString& a);
    CwjbString& operator = (const char *pString);
    
    CwjbString operator + (const CwjbString& a);
    CwjbString operator + (const char *pString);
    friend CwjbString operator + (const char *pString , const CwjbString& a);

private:
    int m_nLength;
    char *m_pString;

};

#endif // !defined(AFX_WJBSTRING_H__ED904805_533A_417B_B726_CD2145E42A23__INCLUDED_)
2010-05-13 12:08
最近不在
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:204
专家分:842
注 册:2010-2-28
收藏
得分:0 
实现部分。用到strlink的都错了
程序代码:
// string_5_12.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "wjbString.h"

int main(int argc, char* argv[])
{
    CwjbString obj("gg");
    CwjbString obj1("ff");
    cout<<obj.GetString()<<obj.GetLength()<<endl;

    CwjbString obj2 = obj + obj1;
    cout<<obj2.GetString()<<obj2.GetLength()<<endl;

    CwjbString obj3 = obj + "ggg";
    cout<<obj2.GetString()<<obj2.GetLength()<<endl;

    CwjbString obj6 = "tt" + obj;
    cout<<obj6.GetString()<<obj6.GetLength()<<endl;

    CwjbString obj4 = obj;
    cout<<obj4.GetString()<<obj4.GetLength()<<endl;

    CwjbString obj5 = "abc";
    cout<<obj5.GetString()<<obj5.GetLength()<<endl;
    return 0;
}
大家可以直接拷贝代码,运行,帮我修改下。谢谢了
2010-05-13 12:09
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:606
专家分:2499
注 册:2009-4-8
收藏
得分:0 
CwjbString& StrLink(const char *pString, const char *pString1);
//改成CwjbString StrLink(const char *pString, const char *pString1);不要返回一个引用。

你什么给结帖了…我的分数啊…

[ 本帖最后由 lintaoyn 于 2010-5-13 15:28 编辑 ]

迭代的是人,递归的是神。
2010-05-13 15:11
最近不在
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:204
专家分:842
注 册:2010-2-28
收藏
得分:0 
问题已经解决,也不是你说的问题,谢谢大家!
2010-05-13 22:24
快速回复:写string类遇到的问题
数据加载中...
 
   



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

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