cpp的STL之string
为什么需要string
1 创建和操作方便
2 不用关心内存分配问题
3 不用考虑内存越界
4 更加丰富的操作
stl string类
stirng的基本操作
复制,连接 ,查找字符,查找子串,截短
使用模板算法实现反转,大小写转换
使用这些常用的基本操作,大致就够了啊,其他的可以采用上面的方法组合起来得出结果
//
// main.cpp
// use_stl_string
//
// Created by bikang on 16/10/28.
// Copyright (c) 2016年 bikang. All rights reserved.
//
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
void tstring();
int main(int argc, const char * argv[]) {
tstring();
return 0;
}
void tstring(){
cout << "using string" << endl;
//string的初始化的方法
const char *pchar = "hello world";
//根据字符数组创建
string str1(pchar);
cout <<"str1="<<str1 <<endl;
//根据字符数组创建 只取前3位
string str2(pchar,3);
cout <<"str2="<<str2 <<endl;
//根据string创建
string str3(str1);
cout <<"str3="<<str3 <<endl;
//填充创建
string str4(5,'a');
cout <<"str4="<<str4 <<endl;
//访问string的两种方法
//1 根据长度访问
for(size_t i=0;i<str1.length();i++) cout << str1[i] <<",";
cout << endl;
//2 根据迭代器访问
string::const_iterator iter1;
for(iter1=str1.begin();iter1!=str1.end();++iter1){
cout << *iter1 <<",";
}
cout << endl;
//转换成c风格的字符串
const char *cstr1 = str1.c_str();
cout << cstr1 << endl;
//连接
cout<< str1 + " "+ str2 <<endl;
string find_str = str1 + str2;
//查找,字符或者子串
cout << "find_str="<< find_str << endl;
string to_find = "hel";
size_t pos1 = find_str.find(to_find,0);
size_t to_find_len = to_find.length();
while (pos1 != string::npos) {
cout << pos1<<",";
size_t nextPos = pos1+to_find_len;
pos1 = find_str.find(to_find,nextPos);
}
cout << endl;
//截断字符串
//移除给定位置和指定数量的
cout << "find_str="<< find_str << endl;
find_str.erase(1, 3);
cout << "find_str="<< find_str << endl;
size_t pos3 = find_str.find('o');
find_str.erase(pos3,1);
cout << "find_str="<< find_str << endl;
find_str.erase(find_str.begin(),find_str.end());
cout << "find_str_count="<< find_str.length()<<endl;
//反转
reverse(str1.begin(),str1.end());
cout << "str1="<< str1 << endl;
//大小写转换
str2 = "abc";
string str5 = "";
cout << "str2="<< str2<< endl;
transform(str2.begin(), str2.end(), str2.begin(), (int(*)(int))toupper);
cout << "str2="<< str2<< endl;
transform(str2.begin(), str2.end(), str2.begin(), (int(*)(int))tolower);
cout << "str2="<< str2<< endl;
}