字符串

1)      字符串拼接

cout<< “hello” “ everyone”

“how are you”<<endl;

 

2)      C++字符串类与C字符数组的比较

l       定义

typedef basic_string<char> string;

typedef basic_string<wchar> wstring;

 

template<class charT,

class traits = char_traits<chart>,

class allocator = allocator<charT> >

class basic_string{};

 

                 traits控制多种字符集的比较行为。

                 allocator控制字符串内存分配策略。

 

l       无需担心空间的大小,其会动态增加

l       无需担心是否以’/0’结尾

l       无需担心是否越界

l       提供一系列成员函数方法操纵字符串

l       构造函数帮助我们初始化字符串为0C为随机值)

 

3)      构造函数/字串

l       默认构造

#include <string>

using namespacec std;

string str; //长度为0, 容量capacity15

 

l       拷贝构造

string str1;

string str2(str1, 开始索引,拷贝个数)

string str3(str2.begin(), str2.end())

string str4(个数,‘a); //na初始化

 

l       子串

string str1;

string str2 = str1.substr(开始索引,个数);

str2 = str1.substr(); //拷贝整个串

str2 = str1;

 

4)      长度/容量

l       size()/length()获得字符串大小

l       capacity()获得目前容量,包括字符串大小在内

l       reserve()表示预留多少空间,可提高效率

l       resize()默认行为可缩短字符串,或增大字符串(填充空格),用重载版本可填充别的字符。

 

注意resize缩短字符串并不会改变原有的capacity()大小。 

 

5)      操作

l       替换

replace(被替换字符串开始处,替换字符数,替换字符串);

替换不会增加字符串空间,除非替换开始处+替换字符数超出了字符空间,那么这种情况跟插入差不多了。

 

l       查找

1)      找第一个子串

index = find(要查找的字符串,查找开始处)

找到了则index != string:npos

 

2)      找第一个子串

index = find_first_of(要查找的字符串,查询开始处)

找到了则index != string:npos

 

3)      找最后一个子串

index = find_last_of(要查找的字符串,查询开始处)

找到了则index != string:npos

 

4)      找第一个不在字符串里的字符的位置

index = find_first_not_of(要查找的字符串,查询开始处)

找到了则index != string:npos

比如:string str = “hello, yeqianxun!”;

find_first_not_of(“hey, yeming”, 0);

l不在字串里,所以返回2

 

5)      找最后一个不在字符串里的字符的位置

index = find_last_not_of(要查找的字符串,查询开始处)

找到了则index != string:npos

 

6)      反向查找

string str = “hello, body, hello, everyone!”;

index = rfind(“hello”);//返回13

如果rfind(“hello”,0),则和find(“hello”)一样。

 

注意string::npos == 0xFFFF FFFF

 

l       删除

erase(); //删除所有

erase(开始删除的位置,删除的个数 = sring::npos); //默认是npos,所以删除所有。

 

 

l       字符定位

1)      [index]

char c = str[0];

 

2)      at(index)

如果越界会抛出out_of_range异常,比较安全。

关于异常,请参考

http://blog.csdn.net/yeming81/archive/2010/06/16/5673070.aspx

 

 

l       比较

1)      ==比较

string str1;

string str2;

str1 == str2;

“hello” == str1; //合法

 

2)      字符串部分比较 compare

compare(本串开始比较位置,比较字符数,要比较的字符串,其开始比较处,比较字符数)

 

l       其他

insert插入子串、append附加子串到末尾、c_str返回以0结尾的C型字符串。

 

6)      重载特性

l       忽略大小写的比较

1)  string类没有包含忽略大小写的比较,因为不同语言对大小写的定义不一样,很难统一。另外一个原因是,字符集相关的功能由traits模板提供。

 

2)  定义自己的traits

struct myTraits : char_traits<char>

{

static bool eq(char cFirst, char cSecond)

{

        return toupper(cFirst) == toupper(cSecond);

}

static bool ne(char cFirst, char cSecond)

{

        return !eq(cFirst, cSecond);

}

static bool lt(char cFirst, char cSecond)

{

        return toupper(cFirst) < toupper(cSecond);

}

static int compare(const char* str1, const char* str2,

 size_t count)

{

//比较str1str2的前count个字符,忽略大小写
}

                               static const char* find(const char* str1, size_t count,

                               char c)

                              {

       //找出cstr1中的位置,忽略大小写
    }

   };

 

3)  定义自己的字符串类

typedef basic_string<char, myTraits> MyString;

 

4)  重载新字符串输出

ostream& operator<<(ostream& os, const MyString& str);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值