您的位置:首页 > 编程语言 > C语言/C++

C++学习(一)——标准库类型之string全解析

2016-04-27 21:40 519 查看
0. 标准库类型之string类  

  用户程序要使用 string 类型对象,必须包含相关头文件。如果提供了合适的 using 声明,那么编写出来的程序将会变得简短些。因此头文件部分必备的三行代码:

#include  <iostream>
#include  <string>   //如果包含非标准输入输出头文件iostream.h,编译会出错.string.h是C语言中字符串的头文件,不适用于C++.
using namespace std;


1. 几种初始化string 对象的方式

代码对应含义
string s1默认构造函数 s1 为空串
string s2(s1)将 s2 初始化为 s1 的一个副本
string s3(“value”)将 s3 初始化为一个字符串字面值副本
string s4(n, ‘c’)将 s4 初始化为字符 ‘c’ 的 n 个副本
2. string对象的操作

TablesAre
s.empty()如果 s 为空串,则返回 true,否则返回 false。
s.size()返回 s 中字符的个数
s
返回 s 中位置为 n 的字符,位置从 0 开始计数
s1 + s2把 s1 和s2 连接成一个新字符串,返回新生成的字符串
s1 = s2把 s1 内容替换为 s2 的副本
v1 == v2比较 v1 与 v2 的内容,相等则返回 true
3. 常见面试题:实现一个 String 类

  首先选择数据成员,最简单的 String 只有一个 char* 成员变量。

  其次决定支持哪些操作,常见的构造、析构、拷贝构造、赋值这几样是肯定要有的。

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
= '\0';
newStr.size = n;
return newStr;
}
// 重载输出
ostream & operator<<(ostream &o, const String &str){
o<"<


4.备注

  另外一篇博客也很清晰的讲解了标准C++中的string类的用法总结

http://www.cnblogs.com/xFreedom/archive/2011/05/16/2048037.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  string C++