`
moxiaomomo
  • 浏览: 45395 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

C++ String类会用,也要会实现

    博客分类:
  • C++
阅读更多
面试的时候被问及了String类的实现,结果没写好...
就当是重新复习一下吧。
下面的程序并没有把String类的所有成员方法实现,只写了大部分重要的成员函数。

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

class String{
    friend ostream& operator<< (ostream&,String&);//重载<<运算符
     friend istream& operator>> (istream&,String&);//重载>>运算符
public:
    String(const char* str=NULL);                //赋值构造兼默认构造函数(char)
    String(const String &other);                 //赋值构造函数(String)
    String& operator=(const String& other);       //operator=
    String operator+(const String &other)const;  //operator+
    bool operator==(const String&);              //operator==
    char& operator[](unsigned int);              //operator[]
    size_t size(){return strlen(m_data);};
    ~String(void) {delete[] m_data;}
private:
    char *m_data; // 用于保存字符串
};

inline String::String(const char* str)   
{
	if(!str)m_data=0;      //声明为inline函数,则该函数在程序中被执行时是语句直接替换,而不是被调用
	else {
		m_data=new char[strlen(str)+1];
		strcpy(m_data,str);
	}
}

inline String::String(const String &other)
{
	if(!other.m_data)m_data=0;//在类的成员函数内可以访问同种对象的私有成员(同种类则是友元关系)
	else 
	{
		m_data=new char[strlen(other.m_data)+1];
		strcpy(m_data,other.m_data);
	}
}

inline String& String::operator=(const String& other)
{
    if (this!=&other)
    {
        delete[] m_data;
        if(!other.m_data) m_data=0;
        else
        {
            m_data = new char[strlen(other.m_data)+1];
            strcpy(m_data,other.m_data);
        }
    }
    return *this;
}
inline String String::operator+(const String &other)const
{
    String newString;
    if(!other.m_data)
        newString = *this;
    else if(!m_data)
        newString = other;
    else
    {
        newString.m_data = new char[strlen(m_data)+strlen(other.m_data)+1];
        strcpy(newString.m_data,m_data);
        strcat(newString.m_data,other.m_data);
    }
    return newString;
}

inline bool String::operator==(const String &s)    
{
    if ( strlen(s.m_data) != strlen(m_data) )
        return false;
    return strcmp(m_data,s.m_data)?false:true;
}

inline char& String::operator[](unsigned int e)
{
    if (e>=0&&e<=strlen(m_data))
        return m_data[e];
}

ostream& operator<<(ostream& os,String& str)
{
    os << str.m_data;
    return os;
}

istream &operator>>( istream &input, String &s )
{
   char temp[ 255 ]; //用于存储输入流
   input>>setw(255)>>temp;
   s = temp; //使用赋值运算符
   return input; //使用return可以支持连续使用>>运算符
}

int main()
{
    String str1="Aha! ";
    String str2="My friend";
    String str3 = str1+str2;
    cout<<str3<<"\n"<<str3.size()<<endl;
    return 0;
}

2
3
分享到:
评论

相关推荐

    C++ String类实现

    C++实现的String类,可以支持UTF-8编码

    C++实现的string 类

    2、为string类提供必要的成员函数,可以参考C++类库的string类提供了那些成员函数,至少应包括下标访问,子串查找、获得C风格字符串、获得字符串长度、字符串比较这几个函数 3、利用该string类完成测试程序:统计一...

    c++string类函数原型借鉴.pdf

    本文主要介绍了C++中的字符串类函数原型借鉴,通过自定义的String类来实现字符串的操作。下面将对标题、描述、标签和部分内容进行详细的分析和解释。 标题:C++ String 类函数原型借鉴 C++中的字符串操作是非常...

    典型的String类实现C++

    一个典型的String类实现,C++描述,里面包括String的构造函数,赋值构造函数,析构函数,赋值操作符的实现等

    C++string类仿写

    C++编写的类似于string类,自己改动实现相关库函数功能 C++的一般编译器都定义和封装了字符串功能,请模仿定义string类的实现,可以实现并支持如下功能: (1)string s = “rubbish大学”; (2)string t = s; ...

    c++string函数源码

    c++string函数源码 无修改

    C++ String 详解 C++ String 详解

    C++ String 详解的优点在于,它不需要担心内存的分配和释放,字符串的长度也可以自动扩展,用户可以随意地使用赋值、比较、串联等操作。同时,C++ String 详解也提供了许多实用的操作函数,如assign、swap、append、...

    c++string用法详解

    String 类可以与 STL 的 sort 算法一起使用,实现字符串的排序。 6. String 的去重功能 String 类可以与 STL 的 unique 函数一起使用,实现字符串的去重。 7. String 的其它功能 String 类还提供了许多其它功能...

    C++实现string类

    然而,为了深入理解C++的机制,有时我们可能需要自定义一个`string`类来实现特定的功能或者学习如何复现内置类型的行为。本篇文章将详细介绍如何在C++中实现一个简单的`string`类,并覆盖一些基本的运算符,如`+`、`...

    c++String类的重写

    在C++编程语言中,`std::string` 类是用于处理字符串的重要工具,它提供了丰富的功能,如拼接、查找、替换等。然而,为了满足特定需求或优化性能,我们有时需要对`std::string`类进行重写,即自定义它的行为。这通常...

    C++实现的String字符串类

    在这个“C++实现的String字符串类”中,我们将探讨类的设计、重载操作符、内存管理以及类的组合。 首先,一个自定义的`String`类通常会包含以下几个核心部分: 1. **数据成员**:存储字符串的实际字符序列,通常是...

    c++string类函数原型参考.pdf

    在C++中,`std::string`类是用于处理字符串的高效且方便的工具,它提供了许多内置功能,如插入、删除、查找、比较等。然而,在某些情况下,程序员可能需要自定义一个类来实现类似的功能,就像示例中所示的`String`类...

    c++自定义string类

    请注意,为了实现这些功能,需要确保类设计时考虑了内存管理,避免内存泄漏,并且要遵守C++的构造/析构规则。同时,为了提高效率,可以考虑使用STL的`std::vector&lt;char&gt;`代替动态分配的字符数组。此外,还可以考虑...

    c++链表string类程序

    在这个"链表string类程序"中,我们可以预想它可能涉及到用C++实现链表结构,并结合`std::string`进行字符串的操作。下面将详细介绍`std::string`类以及如何将其与链表相结合。 1. **`std::string` 类基础** `std::...

    C++语言string类的实现 完整源代码 pdf

    ### C++语言中的自定义String类:MyString 在C++编程中,标准库提供了一个功能强大的`std::string`类来处理字符串相关的操作。不过,深入理解如何手动实现一个字符串类不仅能帮助开发者更好地掌握底层原理,还能...

    c++作业设计string类

    2、为string类提供必要的成员函数,可以参考C++类库的string类提供了那些成员函数,至少应包括下标访问,子串查找、获得C风格字符串、获得字符串长度、字符串比较这几个函数 3、利用该string类完成测试程序:统计一...

    C++ string类的模拟实现

    C++ string类的模拟实现

    C++实现string存取二进制数据的方法

    总的来说,当在C++中使用string类处理二进制数据时,需特别注意空字符的影响,正确使用构造函数并传递数据长度,以确保数据的完整性和一致性。同时,理解string类的内部工作原理以及其与二进制数据交互时可能出现的...

    c++string类的实现

    2)string类经常用到find find_first_of find_first_not_of find_last_of find_last_not_of substr replace等,以及联合使用来达到java中的split和trim 3) 有些函数返回的是MyString& 、Char& 等(引用),MyString、...

    用c++实现的String类

    这个“用C++实现的String类”就是一个这样的例子。它允许我们创建自己的字符串对象,并自定义一系列操作方法,以满足特定的编程需求。 首先,`String`类通常会包含以下几个核心组成部分: 1. **数据成员**:用于...

Global site tag (gtag.js) - Google Analytics