C++中string类

一.string本质
其实,string并不是一个单独的容器,只是basic_string 模板类的一个typedef 而已,相对应的还有wstring, 你在string 头文件中你会发现下面的代码:
extern "C++" {
            typedef basic_string string;
            typedef basic_string wstring;
} // extern "C++"

二.构造字符串
  char allArray[] = "All‘s well that ends well";
  string five(allArray, 20);
  string six(allArray+6, allArray+10);
  原型:string(const char *s, size_type n)
  强制从s那里复制n个字符串,如果s的长度小于n,仍然复制无用的字符。
  原型:template string(Iter begin, Iter end)
  由于数组名相当于指针,所以allArray+6, allArray+10的类型都是char *,因此使用模板时,将类型char *替换Iter。six初始化为well。
  string seven(five+6, five+10); //该语句是错误的,对象名不会被看着对象的地址,five不是指针,而five[6]是个char值,所以&five[6]是一个地址。
  string seven(&five[6], &five[10]);

三.string类输入
   对于C-风格:
   char info[6];
   cin.getline(info, 6); //read a line, discard /n
   cin.getline(info, 6, ":"); //read up to :,discard :
   对于string:
   string sbuff;
   cin.getline(cin,info); //read a line, discard /n
   cin.getline(cin,info, ":"); //read up to :,discard :
   它们之间主要区别:string版本的getline将自动调整目标string对象的大小。string对象的最大允许长度,由string::npos指定,这通常是最大unsigned int值。


四.sting类使用
   string 提供了非常丰富的查找函数find(find_first_of,find_last_o和substr),insert, replace和erase等函数.
   string的c_str()函数是用来得到C语言风格的字符串,其返回的指针不能修改其空间。而且在下一次使用时重新调用获得新的指针。
   string的data()函数返回的字符串指针不会以'/0'结束,千万不可忽视。
   有这样一个需求:过滤一行开头和结尾的所有非英文字符。看看用string 如何实现:
#include
#include
using namespace std;
int main(){
    string strinfo="       //*---Hello Word!......------";
    string strset="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    int first = strinfo.find_first_of(strset);
    if(first == string::npos) {
            cout<<"not find any characters"<
            return -1;
    }
    int last = strinfo.find_last_of(strset);
    if(last == string::npos) {
            cout<<"not find any characters"<
            return -1;
    }
    cout << strinfo.substr(first, last - first + 1)<
    return 0;
}


五.CString,int,string,char*之间的转换
1.string -> CString 
CString.format("%s", string.c_str()); 

2.char -> CString 
CString.format("%s", char*); 

3.char -> string 
string s(char *); 

4.string -> char * 
char *p = string.c_str(); 

5.CString -> string 
string s(CString.GetBuffer()); 

6.string -> CString 
CString.format("%s", string.c_str()); 
用c_str()确实比data()要好. 

7.char -> string 
string s(char *); 
你的只能初始化,在不是初始化的地方最好还是用assign(). 

8.CString -> string 
string s(CString.GetBuffer()); 
GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间. 

9.将字符转换为整数,可以使用atoi、_atoi64或atol。

10.CString转换 char[100]
char a[100]; 
CString str("aaaaaa"); 
strncpy(a,(LPCTSTR)str,sizeof(a));

六附录
string 函数列表 函数名      描述  
begin      得到指向字符串开头的Iterator  
end      得到指向字符串结尾的Iterator  
rbegin      得到指向反向字符串开头的Iterator  
rend      得到指向反向字符串结尾的Iterator  
size      得到字符串的大小  
length      和size函数功能相同  
max_size      字符串可能的最大大小  
capacity      在不重新分配内存的情况下,字符串可能的大小  
empty      判断是否为空  
operator[]      取第几个元素,相当于数组  
c_str      取得C风格的const char* 字符串  
data      取得字符串内容地址  
operator=      赋值操作符  
reserve      预留空间  
swap      交换函数  
insert      插入字符  
append      追加字符  
push_back      追加字符  
operator+=      += 操作符  
erase      删除字符串  
clear      清空字符容器中所有内容  
resize      重新分配空间  
assign      和赋值操作符一样  
replace      替代  
copy      字符串到空间  
find      查找  
rfind      反向查找  
find_first_of      查找包含子串中的任何字符,返回第一个位置  
find_first_not_of      查找不包含子串中的任何字符,返回第一个位置  
find_last_of      查找包含子串中的任何字符,返回最后一个位置  
find_last_not_of      查找不包含子串中的任何字符,返回最后一个位置  
substr      得到字串  
compare      比较字符串  
operator+      字符串链接  
operator==      判断是否相等  
operator!=      判断是否不等于  
operator<      判断是否小于  
operator>>      从输入流中读入字符串  
operator<<      字符串写入输出流  
getline      从输入流中读入一行 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值