Tips: 1. 本人当初学习C/C++的记录。 2. 资源很多都是来自网上的,如有版权请及时告知! 3. 可能会有些错误。如果看到,希望能指出,以此共勉!
要想使用标准C++中string类,必须要
#include <string>
using std::
string;或
using namespace std;
下面你就可以使用string了。
声明一个C++字符串
声明一个字符串变量很简单: string str; 这样我们就声明了一个字符串变量,但既然是一个类,就有构造函数和析构函数。上面的声明没有传入参数,所以就直接使用了string的默认的构造函数,这个函数所作的就是把str初始化为一个空字符串。string类的构造函数和析构函数如下: 当构造的string太长而无法表达时会抛出length_error异常
string对象的特性描述
1、
int capacity()
const;
2、
int max_size()
const;
3、
int size()
const;
4、
int length()
const;
5、
bool empty()
const;
6、
void resize(
int len,
char c);
这里另一个需要指出的是reserve()函数,这个函数为string重新分配内存。重新分配的大小由其参数决定,默认参数为0,这时候会对string进行非强制性缩减。
string的赋值
1、
string &
operator=(
const string &s);
2、
string &assign(
const char *s);
3、
string &assign(
const char *s,
int n);
4、
string &assign(
const string &s);
5、
string &assign(
int n,
char c);
6、
string &assign(
const string &s,
int start,
int n);
7、
string &assign(const_iterator first,const_itertor last);
string的连接
1、
string &
operator+=(
const string &s);
2、
string &append(
const char *s);
3、
string &append(
const char *s,
int n);
4、
string &append(
const string &s);
5、
string &append(
const string &s,
int pos,
int n);
6、
string &append(
int n,
char c);
7、
string &append(const_iterator first,const_iterator last);
8、
void push_back(
char ch);
注意: 可以将string对象和字符串常量直接连接,但是,必须保证+两侧至少有一个收听对象。例如:string str13 = “hello”+”+str; 是错误的
string的比较:
bool operator==(
const string &s1,
const string &s2)
const;
int compare(
const string &s)
const;
int compare(
int pos,
int n,
const string &s)
const;
int compare(
int pos,
int n,
const string &s,
int pos2,
int n2)
const;
int compare(
const char *s)
const;
int compare(
int pos,
int n,
const char *s)
const;
int compare(
int pos,
int n,
const char *s,
int pos2)
const;
C++字符串支持常见的比较操作符( >,>=,<,<=,==,!= ),甚至支持string与C-string的比较(如 str< “hello”)。在使用>,>=,<,<=这些操作符的时候是根据“当前字符特性”将字符按字典顺序逐一进行比较。字典排序靠前的字符小,比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小。举例如下:
string s(“abcd”);
s.compare(“abcd”);
s.compare(“dcba”);
s.compare(“ab”);
s.compare(s);
s.compare(
0,
2,s,
2,
2);
s.compare(
1,
2,”bcx”,
2);
string的子串
string substr(int pos = 0,int n = npos) const; // 返回pos开始的n个字符组成的字符串
string的交换
void swap(string &s2); // 交换当前字符串与s2的值
string类的查找函数
int find(
char c,
int pos =
0)
const;
int find(
const char *s,
int pos =
0)
const;
int find(
const char *s,
int pos,
int n)
const;
int find(
const string &s,
int pos =
0)
const;
int rfind(
char c,
int pos = npos)
const;
int rfind(
const char *s,
int pos = npos)
const;
int rfind(
const char *s,
int pos,
int n = npos)
const;
int rfind(
const string &s,
int pos = npos)
const;
int find_first_of(
char c,
int pos =
0)
const;
int find_first_of(
const char *s,
int pos =
0)
const;
int find_first_of(
const char *s,
int pos,
int n)
const;
int find_first_of(
const string &s,
int pos =
0)
const;
int find_first_not_of(
char c,
int pos =
0)
const;
int find_first_not_of(
const char *s,
int pos =
0)
const;
int find_first_not_of(
const char *s,
int pos,
int n)
const;
int find_first_not_of(
const string &s,
int pos =
0)
const;
int find_last_of(
char c,
int pos = npos)
const;
int find_last_of(
const char *s,
int pos = npos)
const;
int find_last_of(
const char *s,
int pos ,
int n )
const;
int find_last_of(
const string &s,
int pos = npos)
const;
int find_last_not_of(
char c,
int pos = npos)
const;
int find_last_not_of(
const char *s,
int pos = npos)
const;
int find_last_not_of(
const char *s,
int pos ,
int n )
const;
int find_last_not_of(
const string &s,
int pos = npos)
const;
string类的替换函数
string &replace(
int p0,
int n0,
const char * s );
string &replace(
int p0,
int n0,
const char * s,
int n );
string &replace(
int p0,
int n0,
const string & s );
string &replace(
int p0,
int n0,
const string & s ,
int pos,
int n );
string &replace(
int p0,
int n0,
int n,
char c );
string &replace( iterator first0, iterator last0,
const char *s );
string &replace( iterator first0, iterator last0,
const char *s,
int n );
string &replace( iterator first0, iterator last0,
const string &s );
string &replace( iterator first0, iterator last0,
int n,
char c );
string &replace( iterator first0, iterator last0,const_iterator first, const_iterator last );
string类的插入函数:
string &insert(
int p0,
const char *s );
string &insert(
int p0,
const char *s ,
int n );
string &insert(
int p0,
const string &s );
string &insert(
int p0,
const string &s,
int pos,
int n );
string &insert(
int p0,
int n,
char c );
iterator insert( iterator it,
char c );
void insert( iterator it, const_iterator first, const_iterator last );
void insert( iterator it,
int n,
char c );
string类的删除函数:
iterator erase( iterator first, iterator last );
iterator erase( iterator it );
string &erase(
int pos =
0,
int n = npos );
void pop_back();
string类的迭代器处理:
string提供了向前和向后遍历的迭代器iterator,迭代器提供了访问各个字符的语法,类似于指针操作,迭代器不检查范围。 用string::iterator或string::const_iterator 声明迭代器变量,const_iterator不允许改变迭代器的内容,但是其自身可以改变。 通过设置迭代器string:: reverse_iterator, string::const_reverse_iterator实现从后向前 string 迭代器可以使用解引用符(*)以及自增自减运算符(++/–) 迭代器可以用==或!=进行比较,指向同一元素则为相等
C++中string对象中的字符操作
经常要对 string 对象中的单个字符进行处理,例如,通常需要知道某个特殊字符是否为空白字符、字母或数字。下表列出了各种字符操作函数,适用于 string 对象的字符(或其他任何 char 值)。这些函数都在cctype头文件中定义。
函数原型作用ASCII码值
int isalnum( int ch )若 ch 是字母或数字,则为 True。int isalpha( int ch )若 ch 是字母,则返回非零int iscntrl(int ch )若 ch 是控制字符,则返回非零0~0x1Fint isdigit(int ch )若 ch 是数字,则为 true。int isgraph(int ch )若 ch 不是空格,但可打印,则返回非零0x21~0x7Eint islower(int ch )若 ch 是小写字母,则为 true。int isprint(int ch)若ch 是可打印的字符,则为 true。0x20~0x7Eint ispunct(int ch)若ch 是标点符号,则 true。int isspace(int ch)若ch 是空白(空格、换行等)字符,则为 true。int isupper(int ch)若ch 是大写字母,则 true。int isxdigit(int ch)若ch是 十六进制数0~9,A~F,a~f,则为 true。int tolower(int ch)若ch 大写字母,返回其小写字母形式,否则直接返回 c。int toupper(int ch )若ch 是小写字母,则返回其大写字母形式,否则直接返回 c。int isascii( int ch )若ch是ASCII码0~127,则返回非零
可以使用下标操作符[]及at()函数对string对象元素进行索引 const char &operator[](int n)const; // 运算符的重载 const char &at()(int n)const; // 成员函数 char &operator[](int n); char &at()(int n); const char *data()const; // 返回一个非null终止的c风格的字符数组 operator[]和at()均返回当前字符串中第n个字符的位置,但at函数提供范围检查,当越界时会抛出out_of_range异常,下标运算符[]不提供检查访问。
C++风格字符串和C风格字符串的转换
由C++风格字符串得到对应的C风格字符串的方法如下:
const char * data()
const;
const char * c_str()
const;
int copy(
char *s,
int n,
int pos)
const;
由C风格字符串得到对应的C++风格字符串的方法:直接赋值即可。
C++字符串并不以’\0’结尾。
字符串中的中文操作
每个汉字为两个字符。
C++11新增原始字符串
所谓的原始字符串就是,字符串中每个字符都表示他自己,例如:\0不再是转义字符,而是表示\和0。再例如:再也不用使用\”来输出”了。 原始字符串使用()来界定字符串的范围,并且使用前缀R来识别原始字符串。 在支持C++11特性的编译器中,上图中的两句效果是一样的!VS2010不支持
ZC·Shou
认证博客专家
砖家
码字员
没了
进步始于交流,收获源于分享!进步始于交流,收获源于分享!进步始于交流,收获源于分享!进步始于交流,收获源于分享!进步始于交流,收获源于分享!
转载请注明原文地址: https://ju.6miu.com/read-24201.html