题目
请用c++ 实现stl中的string类,实现构造,拷贝构造,析构,赋值,比较,字符串相加,获取长度及子串等功能。
代码
#include <iostream>
#include <cstring>
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();
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;
}
else{
size = strlen(str);
data = new char[size+1];
strcpy(data,str);
}
}
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;
}
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;
}
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;
}
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];
}
newStr.data[n] = '\0';
newStr.size = n;
return newStr;
}
ostream & operator<<(ostream &o, const String &str){
o<<str.data;
return o;
}
int main(){
String str1("hello ");
String str2 = "world";
String str3 = str1 + str2;
cout<<"str1->"<<str1<<" size->"<<str1.length()<<endl;
cout<<"str2->"<<str2<<" size->"<<str2.length()<<endl;
cout<<"str3->"<<str3<<" size->"<<str3.length()<<endl;
String str4("helloworld");
if(str3 == str4){
cout<<str3<<" 和 "<<str4<<" 是一样的"<<endl;
}
else{
cout<<str3<<" 和 "<<str4<<" 是不一样的"<<endl;
}
cout<<str3.substr(6,5)<<" size->"<<str3.substr(6,5).length()<<endl;
return 0;
}
<script type="text/javascript">
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('<ul/>').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('<li/>').text(i));
};
$numbering.fadeIn(1700);
});
});
</script>
分享到:
相关推荐
包含四个STL笔试、面试题的文档 STL说明.doc STL.doc 三十分钟掌握STL.doc STL面试题.doc
C++ stl中重要容器string类的构造方法与基本概念和一些有用的字符串操作
很全的STL string类的函数方法,便于查询
C++ STL--数据结构与算法实现(余文溪)示例程序代码.rar
第4章C++标准库STLstring类.ppt
C++17 STL Cookbook: Discover the latest enhancements to functional programming and lambda expressions Mastering the C++17 STL: Make full use of the standard library components in C++17 C__17 STL ...
C++实现STL容器之Vector
第4章-C++-标准库STL-string类.ppt
C++ STL实现包含常用stl模板的手动实现仅供参考
包含常用stl string的常用函数
C++实现STL容器之List
C++实现STL容器之deque
C++实现STL容器之queue
C++ 对模板(Template)支持得很好,STL 就是借助模板把常用的数据结构及其算法都实现了一遍,并且做到了数据结构和算法的分离。例如,vector 的底层为顺序表(数组),list 的底层为双向链表,deque 的底层为循环...
C++ STL中文版 C++ STL中文版 C++ STL中文版 C++ STL中文版 C++ STL中文版
用c++实现stl中的string类
C++17 STL标准库学习教材电子
内容简介,涵盖内容广泛。源码实现参照STL源码。
【STL源代码】中包含了许多常用的数据结构(如vector、list、map等)和算法(如排序、查找、遍历等)。通过阅读代码可以仔细研究这些数据结构和算法的实现,了解它们的内部工作原理和使用方式。