c++STL之string
来源:互联网 发布:科来抓包软件 编辑:程序博客网 时间:2024/06/10 05:29
STL的简介:
高可重用性:STL中几乎所有的代码都采用了模板类和模版函数的方式实现,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。
高性能:如map可以高效地从十万条记录里面查找出指定的记录,因为map是采用红黑树的变体实现的。(红黑树是平横二叉树的一种)
高移植性:如在项目A上用STL编写的模块,可以直接移植到项目B上。
跨平台:如用windows的VisualStudio编写的代码可以在Mac OS的XCode上直接编译。
string封装了char*,管理这个字符串,是一个char*型的容器。
string管理char*所分配的内存。每一次string的复制,取值都由string类负责维护,不用担心复制越界和取值越界等。
如:
string a; string b;
a += b;
查找find, 拷贝copy,删除erase
替换replace,插入insert,等等
string使用之前的准备:
#include<string>
using namespace std;
必要的头文件!!!
string的构造函数:
string(); //构造一个空的字符串string s1。
string(const string &str); //构造一个与str一样的string。如string s1(s2)。
string(const char *s); //用字符串s初始化
string(int n,char c); //用n个字符c初始化
string的存取字符操作:
const char&operator[] (int n) const;
const char&at(int n) const;
char &operator[](int n);
char &at(int n);
char c = strA[3];
char d = strA.at(5);
以上两句对应前两个方法
strA[3] = 'X';
strA.at(5) = 'Y';
以上两句对应后两个方法
主要区别在于at()在越界时会抛出异常,[]在刚好越界时会返回(char)0,再继续越界时,编译器直接出错。
如果你的程序希望可以通过try,catch捕获异常,建议采用at()。
从string取得constchar*的操作:
const char *c_str()const; //返回一个以'\0'结尾的字符串
把string拷贝到char*指向的内存空间的操作:
把当前串中以pos开始的n个字符拷贝到以s为起始位置的字符数组中,返回实际拷贝的数目。注意要保证s所指向的空间足够大以容纳当前字符串,不然会越界。
取string的长度:
int length()const; //返回当前字符串的长度。长度不包括字符串结尾的'\0'。
bool empty()const; //当前字符串是否为空
string的赋值:
string&assign(const char *s); //把字符串s赋给当前的字符串
string&assign(const char *s, int n); //把字符串s的前n个字符赋给当前的字符串
string&assign(const string &s); //把字符串s赋给当前字符串
string &assign(intn,char c); //用n个字符c赋给当前字符串
string&assign(const string &s,int start,int n); //把字符串s中从start开始的n个字符赋给当前字符串
string的连接:
string&operator+=(const string &s); //把字符串s连接到当前字符串结尾
string&operator+=(const char *s);//把字符串s连接到当前字符串结尾
string&append(const char *s); //把字符串s连接到当前字符串结尾
string&append(const char *s,int n); //把字符串s的前n个字符连接到当前字符串结尾
string&append(const string &s); //同operator+=()
string&append(const string &s,int pos,int n);//把字符串s中从pos开始的n个字符连接到当前字符串结尾
string &append(int n, char c); //在当前字符串结尾添加n个字符c
string的比较:
int compare(conststring &s) const; //与字符串s比较
int compare(constchar *s) const; //与字符串s比较
compare函数在>时返回1,<时返回 -1,==时返回 0。比较区分大小写,比较时参考字典顺序,排越前面的越小。大写的A比小写的a小。
string的子串:
string substr(intpos=0, int n=npos) const; //返回由pos开始的n个字符组成的子字符串
string的查找:
int find(char c,intpos=0) const; //从pos开始查找字符c在当前字符串的位置
int find(const char*s, int pos=0) const; //从pos开始查找字符串s在当前字符串的位置
int find(const string&s, int pos=0) const; //从pos开始查找字符串s在当前字符串中的位置
find函数如果查找不到,就返回-1
int rfind(char c, intpos=npos) const; //从pos开始从后向前查找字符c在当前字符串中的位置
int rfind(const char*s, int pos=npos) const;
int rfind(conststring &s, int pos=npos) const;
//rfind是反向查找的意思,如果查找不到,返回-1
string的插入:
string &insert(int pos, const char *s);
string &insert(int pos, const string&s);
//前两个函数在pos位置插入字符串s
string &insert(int pos,int n, char c); //在pos位置 插入n个字符c
string的删除:
string &erase(int pos=0,int n=npos); //删除pos开始的n个字符,返回修改后的字符串
string的替换:
string &replace(int pos,int n, const char *s);//删除从pos开始的n个字符,然后在pos处插入串s
string &replace(int pos,int n, const string&s); //删除从pos开始的n个字符,然后在pos处插入串s
void swap(string&s2); //交换当前字符串与s2的值
string与wstring的转换:
调用Windows的API函数:WideCharToMultiByte()函数和MultiByteToWideChar()函数。
第二种方法
使用ATL的CA2W类与CW2A类。或使用A2W宏与W2A宏。
#include<string>
#include<locale.h>
using namespace std;
//wstring转成string
string ws2s(constwstring &ws)
{
string curLocale =setlocale(LC_ALL,NULL); //curLocale="C";
setlocale(LC_ALL,"chs");
const wchar_t *_Source=ws.c_str();
size_t_Dsize=2*ws.size()+1;
char * _Dest = newchar[_Dsize];
memset(_Dest,0,_Dsize);
wcstombs(_Dest,_Source,_Dsize);
string result =_Dest;
delete[] _Dest;
setlocale(LC_ALL,curLocale.c_str());
return result;
}
//string转成wstring
wstring s2ws(conststring &s)
{
string curLocale =setlocale(LC_ALL,NULL); //curLocale ="C"
setlocale(LC_ALL,"chs");
const char *_Source =s.c_str();
size_t _Dsize =s.size()+1;
wchar_t *_Dest = newwchar_t[_Dsize];
wmemset(_Dest,0,_Dsize);
mbstowcs(_Dest,_Source,_Dsize);
wstring result =_Dest;
delete[] _Dest;
setlocale(LC_ALL,curLocale.c_str());
return result;
}
编码统一化,编写单一源代码:
#ifdef _UNICODE
typedef wstring tstring;
typedef wchar_t tchar;
#define _T(x) L ## x
#else
typedef stringtstring;
typedef char tchar;
#define _T(x) x
#endif
OK,关于string的常用操作就是这些,灵活运用string类可以方便快速的处理文本操作。
c++ qq交流群:308329669
- C++STL之string
- C++STL之string
- C++STL之string
- C++STL之string
- c++STL之string
- C++STL之string
- C++STL之string
- C++STL之string
- C++STL之string
- C++STL之string
- C++STL之string
- C++STL之string
- C++STL之string
- c++stl之string
- C++STL之string上
- C++STL之string下
- C++STL之String详解
- C++STL库函数之string用法总结
- Dither算法
- SQL Server 2008 清理数据库日志文件
- 用JavaScript动态加载CSS和JS文件
- 如何让MAC OS X桌面程序弹出"用户登陆密码输入框"并提权至System权限
- nginx如何执行请求的
- c++STL之string
- 通过Parcelable协议传递数据出现错误(Unmarshalling unknown type code 7471205 at offset 232)
- springmvc注解配置例子的实例代码
- java中的final关键字
- Pointwise.v17.3R3.Win32_64 发现者软件网
- zzuli OJ 1108: 打印数字图形(函数专题)
- iOS开发关闭NSLog在控制台不能够输出
- android布局layout中的一些属性
- 深入理解javascript闭包