`
moxiaomomo
  • 浏览: 44192 次
  • 性别: 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类完成测试程序:统计一...

    典型的String类实现C++

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

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

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

    C++实现string类

    用c++实现string类,包运算符重载+,+=,&lt;,&gt;,等,还有运算符输入输出流

    C++string类仿写

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

    c++作业设计string类

    2、为string类提供必要的成员函数,可以参考C++类库的string类提供了那些成员函数,至少应包括下标访问,子串查找、获得C风格字符串、获得字符串长度、字符串比较这几个函数 3、利用该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 类.docx

    C++随手代码收藏 自定义实现 String 类.docx

    功能强大的String类源码(C++)

    用C++语言实现的一个功能强大的String类,该类包含对字符串的各种灵活操作,40多个强大的API(CharAt,Length,IndexOf,Replace,Add,Insert,Remove.....), 为学习数据结构的朋友提供了很好的帮助。

    《C++String深入详解2.0版》PDF

    一、 C++的string的使用 3 1.1 C++ string简介 3 1.2 string的成员 3 1.2.1 append 3 1.2.2 assign 4 1.2.3 at 4 1.2.4 begin 5 1.2.5 c_str 5 1.2.6 capacity 5 1.2.7 clear 6 1.2.8 compare 6 1.2.9 copy 6 1.2.10...

    C++中string类的模拟实现

    而应逐个遍历字符输出)、流提取操作符重载中对于输入结束的处理(如果直接使用 cin &gt;&gt; ch 的形式输入字符,空格和换行符会被认为是字符输入间的间隔,不会进入缓冲区,如果要使空格也能被输入,并能以换行符作为...

    C++实现的String字符串类

    一个又C++实现的字符类重写,是老师留得作业,但是内容充实,可以广泛扩展,同时实现了类的重载,定义,以及组合等内容

    c++string函数源码

    c++string函数源码 无修改

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

    主要介绍了C++实现string存取二进制数据的方法,针对STL中string的用法进行了较为详细的分析,需要的朋友可以参考下

    用c++实现的String类

    自己实现的String类,定义了串类型并提供功能强大的串函数 类String的对象用动态内存存放长度可变的串,用运算符重载来产生串表达式 提供与C++定义的C++串的充分交互

    C++String类基础实现

    对string类的基本功能进行复现,找到了一些错误和c++编程中的细节问题,都在此记录下来。MyString中实现了基本的构造函数、析构函数,重载了常用符号,并且给出了一些常用函数的实现。 供大家学习参考

    自己实现C++ String.docx

    自己实现C++ CString, 参照库函数 实现了c++ 的String类,学会并亲自实现了这个,基本上对C++的理解会更上一层楼

    C++实现java中的String方法,供学习

    C++实现java中的String方法,可以很快了解指针在内存中的移动

Global site tag (gtag.js) - Google Analytics