程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> [經典面試題][百度]c++實現STL中的string類

[經典面試題][百度]c++實現STL中的string類

編輯:C++入門知識

[經典面試題][百度]c++實現STL中的string類


題目

請用c++ 實現stl中的string類,實現構造,拷貝構造,析構,賦值,比較,字符串相加,獲取長度及子串等功能。

代碼

/*-------------------------------------
*   日期:2015-03-31
*   作者:SJF0115
*   題目: 實現string類
*   來源:百度
*   博客:
------------------------------------*/
#include 
#include 
using namespace std;

class String{
public:
    // 默認構造函數
    String(const char* str = NULL);
    // 復制構造函數
    String(const String &str);
    // 析構函數
    ~String();
    // 字符串連接
    String operator+(const String & str);
    // 字符串賦值
    String & operator=(const String &str);
    // 字符串賦值
    String & operator=(const char* str);
    // 判斷是否字符串相等
    bool operator==(const String &str);
    // 獲取字符串長度
    int length();
    // 求子字符串[start,start+n-1]
    String substr(int start, int n);
    // 重載輸出
    friend ostream & operator<<(ostream &o,const String &str);
private:
    char* data;
    int size;
};
// 構造函數
String::String(const char *str){
    if(str == NULL){
        data = new char[1];
        data[0] = '\0';
        size = 0;
    }//if
    else{
        size = strlen(str);
        data = new char[size+1];
        strcpy(data,str);
    }//else
}
// 復制構造函數
String::String(const String &str){
    size = str.size;
    data = new char[size+1];
    strcpy(data,str.data);
}
// 析構函數
String::~String(){
    delete[] data;
}
// 字符串連接
String String::operator+(const String &str){
    String newStr;
    //釋放原有空間
    delete[] newStr.data;
    newStr.size = size + str.size;
    newStr.data = new char[newStr.size+1];
    strcpy(newStr.data,data);
    strcpy(newStr.data+size,str.data);
    return newStr;
}
// 字符串賦值
String & String::operator=(const String &str){
    if(data == str.data){
        return *this;
    }//if
    delete [] data;
    size = str.size;
    data = new char[size+1];
    strcpy(data,str.data);
    return *this;
}
// 字符串賦值
String& String::operator=(const char* str){
    if(data == str){
        return *this;
    }//if
    delete[] data;
    size = strlen(str);
    data = new char[size+1];
    strcpy(data,str);
    return *this;
}
// 判斷是否字符串相等
bool String::operator==(const String &str){
    return strcmp(data,str.data) == 0;
}
// 獲取字符串長度
int String::length(){
    return size;
}
// 求子字符串[start,start+n-1]
String String::substr(int start, int n){
    String newStr;
    // 釋放原有內存
    delete [] newStr.data;
    // 重新申請內存
    newStr.data = new char[n+1];
    for(int i = 0;i < n;++i){
        newStr.data[i] = data[start+i];
    }//for
    newStr.data[n] = '\0';
    newStr.size = n;
    return newStr;
}
// 重載輸出
ostream & operator<<(ostream &o, const String &str){
    o<"<

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved