c/c 之 c string(字符串) -凯发k8官方网
tips:
1. 本人当初学习c/c 的记录。
2. 资源很多都是来自网上的,如有凯发k8官方网的版权请及时告知!
3. 可能会有些错误。如果看到,希望能指出,以此共勉!
要想使用标准c 中string类,必须要
#include下面你就可以使用string了。
声明一个字符串变量很简单:
string str;
这样我们就声明了一个字符串变量,但既然是一个类,就有构造函数和析构函数。上面的声明没有传入参数,所以就直接使用了string的默认的构造函数,这个函数所作的就是把str初始化为一个空字符串。string类的构造函数和析构函数如下:
当构造的string太长而无法表达时会抛出length_error异常
这里另一个需要指出的是reserve()函数,这个函数为string重新分配内存。重新分配的大小由其参数决定,默认参数为0,这时候会对string进行非强制性缩减。
注意:
可以将string对象和字符串常量直接连接,但是,必须保证 两侧至少有一个收听对象。例如:string str13 = “hello” ” str; 是错误的
c 字符串支持常见的比较操作符( >,>=,<,<=,==,!= ),甚至支持string与c-string的比较(如 str< “hello”)。在使用>,>=,<,<=这些操作符的时候是根据“当前字符特性”将字符按字典顺序逐一进行比较。字典排序靠前的字符小,比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小。举例如下:
string s(“abcd”); s.compare(“abcd”); // 返回0 s.compare(“dcba”); // 返回一个小于0的值 s.compare(“ab”); // 返回大于0的值 s.compare(s); // 相等 s.compare(0,2,s,2,2); // 用”ab”和”cd”进行比较 小于零 s.compare(1,2,”bcx”,2); // 用”bc”和”bc”比较。string substr(int pos = 0,int n = npos) const; // 返回pos开始的n个字符组成的字符串
void swap(string &s2); // 交换当前字符串与s2的值
int find(char c, int pos = 0) const; //从pos开始查找字符c在当前字符串的位置 int find(const char *s, int pos = 0) const;//从pos开始查找字符串s在当前串中的位置 int find(const char *s, int pos, int n) const;//从pos开始查找字符串s中前n个字符在当前串中的位置 int find(const string &s, int pos = 0) const;//从pos开始查找字符串s在当前串中的位置 //查找成功时返回所在位置,失败返回string::npos的值 int rfind(char c, int pos = npos) const;//从pos开始从后向前查找字符c在当前串中的位置 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; //从pos开始从后向前查找字符串s中前n个字符组成的字符串在当前串中的位置,成功返回所在位置,失败时返回string::npos的值 int find_first_of(char c, int pos = 0) const;//从pos开始查找字符c第一次出现的位置 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; //从pos开始查找当前串中第一个在s的前n个字符组成的数组里的字符的位置。查找失败返回string::npos 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; //从当前串中查找第一个不在串s中的字符出现的位置,失败返回string::npos 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; // find_last_of和find_last_not_of与find_first_of和find_first_not_of相似,只不过其是从后向前检查 string &replace( int p0, int n0, const char * s ); // 删除从p0开始的n0个字符,然后在p0处插入串s string &replace( int p0, int n0, const char * s, int n ); // 删除从p0开始的n0个字符,然后在p0处插入串s的前n个字符 string &replace( int p0, int n0, const string & s ); // 删除从p0开始的n0个字符,然后在p0处插入串s string &replace( int p0, int n0, const string & s ,int pos, int n ); // 删除从p0开始的n0个字符,然后在p0处插入串s中从pos开始的n个字符 string &replace( int p0, int n0, int n, char c ); // 删除从p0开始的n0个字符,然后在p0处插入n个字符c string &replace( iterator first0, iterator last0, const char *s ); // 把first0和 last0之间的部分替换为字符串s string &replace( iterator first0, iterator last0, const char *s, int n ); // 把first0和 last0之间的部分替换为字符串s的前n个字符 string &replace( iterator first0, iterator last0, const string &s ); // 把first0和 last0之间的部分替换为字符串s string &replace( iterator first0, iterator last0, int n, char c ); // 把first0和 last0之间的部分替换为n个字符c string &replace( iterator first0, iterator last0,const_iterator first, const_iterator last ); // 把first0和 last0之间的部分替换为first和 last之间的字符串 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 ); // 在p0位置插入字符串s中pos开始的前n个字符 string &insert( int p0, int n, char c ); // 在p0处插入n个字符c iterator insert( iterator it, char c ); // 在it处插入字符c,返回插入后迭代器的位置 void insert( iterator it, const_iterator first, const_iterator last );// 在it处插first至last之间的字符 void insert( iterator it, int n, char c ); // 在it处插入n个字符c iterator erase( iterator first, iterator last ); // 删除first至last之间的所有字符,返回删除后迭代器的位置 iterator erase( iterator it ); // 删除it指向的字符,返回删除后迭代器的位置 string &erase( int pos = 0, int n = npos ); // 删除pos开始的n个字符,返回修改后的字符串 void pop_back(); // 删除当前字符串的最后一个字符 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~0x1f |
int isdigit(int ch ) | 若 ch 是数字,则为 true。 | |
int isgraph(int ch ) | 若 ch 不是空格,但可打印,则返回非零 | 0x21~0x7e |
int islower(int ch ) | 若 ch 是小写字母,则为 true。 | |
int isprint(int ch) | 若ch 是可打印的字符,则为 true。 | 0x20~0x7e |
int 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; // 以字符数组的形式返回字符串内容,但并不添加'\0'。(vs中也会添加'\0'??) const char * c_str() const; // 返回一个以'\0'结尾的字符数组 int copy(char *s, int n, int pos) const; // 将当前字符串从pos开始的n个字符拷贝到s中
由c风格字符串得到对应的c 风格字符串的方法:直接赋值即可。
c 字符串并不以’\0’结尾。
字符串中的中文操作
每个汉字为两个字符。
c 11新增原始字符串
所谓的原始字符串就是,字符串中每个字符都表示他自己,例如:\0不再是转义字符,而是表示\和0。再例如:再也不用使用\”来输出”了。
原始字符串使用()来界定字符串的范围,并且使用前缀r来识别原始字符串。
在支持c 11特性的编译器中,上图中的两句效果是一样的!vs2010不支持
总结
以上是凯发k8官方网为你收集整理的c/c 之 c string(字符串)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: c/c 之函数
- 下一篇: