C++中的String的常用函数用法
一. string的构造函数的形式123456789101112131415161718192021string str生成空字符串string s(str)生成字符串为str的复制品string s(str, strbegin,strlen)将字符串str中从下标strbegin开始、长度为strlen的部分作为字符串初值string s(cstr, char_len)以C_string类型cstr的前char_len个字符串作为字符串s的初值string s(num ,c)生成num个c字符的字符串string s(str, stridx)将字符串str中从下标stridx开始到字符串结束的位置作为字符串初值eg:string str1;//生成空字符串string str2(123456789);//生成1234456789的复制品string str3(12345, 0, 3);//结果为123string str4(012345, 5);//结果为01234string str5(5,1);//结果为11111string str6(str2, 2);//结果为345678912345678910111213141516171819202122232425#include iostream#include stringusingnamespacestd;voidtest1(){string str1;//生成空字符串string str2(123456789);//生成1234456789的复制品string str3(12345, 0, 3);//结果为123string str4(0123456, 5);//结果为01234string str5(5,1);//结果为11111string str6(str2, 2);//结果为3456789coutstr2:str2endl;coutstr3:str3endl;coutstr4:str4endl;coutstr5:str5endl;coutstr6:str6endl;}intmain(){test1();return0;}二. string的大小和容量123451. size()和length()返回string对象的字符个数他们执行效果相同。2. max_size()返回string对象最多包含的字符数超出会抛出length_error异常3. capacity()重新分配内存之前string对象能包含的最大字符数123456789voidtest2(){string s(1234567);cout size s.size() endl;cout length s.length() endl;cout max_size s.max_size() endl;cout capacity s.capacity() endl;}三. string的字符串比较1. C 字符串支持常见的比较操作符,,,,,!甚至支持string与C-string的比较(如 str”hello”)。 在使用,,,这些操作符的时候是根据“当前字符特性”将字符按字典顺序进行逐一得 比较。字典排序靠前的字符小 比较的顺序是从前向后比较遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小(前面减后面) 同时string (“aaaa”) string(aaaaa)。 2. 另一个功能强大的比较函数是成员函数compare()。他支持多参数处理支持用索引值和长度定位子串来进行比较。 他返回一个整数来表示比较结果返回值意义如下0相等 1大于 -1小于 (A的ASCII码是65a的ASCII码是97)123456789101112131415161718192021222324voidtest3(){// (A的ASCII码是65a的ASCII码是97)// 前面减去后面的ASCII码0返回10返回-1相同返回0string A(aBcd);string B(Abcd);string C(123456);string D(123dfg);// aBcd 和 Abcd比较------ a Acout A.compare(B) A.compare(B) endl;// 结果1// cd 和 Abcd比较------- c Acout A.compare(2, 3, B):A.compare(2, 3, B) endl;// 结果1// cd 和 cd比较cout A.compare(2, 3, B, 2, 3): A.compare(2, 3, B, 2, 3) endl;// 结果0// 由结果看出来0表示下标3表示长度// 123 和 123比较cout C.compare(0, 3, D, 0, 3)C.compare(0, 3, D, 0, 3) endl;// 结果0}四. string的插入push_back() 和 insert()1234567891011121314voidtest4(){string s1;// 尾插一个字符s1.push_back(a);s1.push_back(b);s1.push_back(c);couts1:s1endl;// s1:abc// insert(pos,char):在制定的位置pos前插入字符chars1.insert(s1.begin(),1);couts1:s1endl;// s1:1abc}五、string拼接字符串append() 操作符1234567891011121314voidtest5(){// 方法一append()string s1(abc);s1.append(def);couts1:s1endl;// s1:abcdef// 方法二 操作符string s2 abc;/*s2 def;*/string s3 def;s2 s3.c_str();couts2:s2endl;// s2:abcdef}六、 string的遍历借助迭代器 或者 下标法1234567891011121314151617181920212223242526272829voidtest6(){string s1(abcdef);// 调用一次构造函数// 方法一 下标法for(inti 0; i s1.size() ; i ){couts1[i];}coutendl;// 方法二正向迭代器string::iterator iter s1.begin();for( ; iter s1.end() ; iter){cout*iter;}coutendl;// 方法三反向迭代器string::reverse_iterator riter s1.rbegin();for( ; riter s1.rend() ; riter){cout*riter;}coutendl;}七、 string的删除erase()1. iterator erase(iterator p);//删除字符串中p所指的字符 2. iterator erase(iterator first, iterator last);//删除字符串中迭代器 区间[first,last)上所有字符 3. string erase(size_t pos 0, size_t len npos);//删除字符串中从索引 位置pos开始的len个字符 4. void clear();//删除字符串中所有字符1234567891011121314151617voidtest6(){string s1 123456789;// s1.erase(s1.begin()1); // 结果13456789// s1.erase(s1.begin()1,s1.end()-2); // 结果189s1.erase(1,6);// 结果189string::iterator iter s1.begin();while( iter ! s1.end() ){cout*iter;*iter;}coutendl;}八、 string的字符替换1. string replace(size_t pos, size_t n, const char *s);//将当前字符串 从pos索引开始的n个字符替换成字符串s 2. string replace(size_t pos, size_t n, size_t n1, char c); //将当前字符串从pos索引开始的n个字符替换成n1个字符c 3. string replace(iterator i1, iterator i2, const char* s);//将当前字符串[i1,i2)区间中的字符串替换为字符串s12345678910111213voidtest7(){string s1(hello,world!);couts1.size()endl;// 结果12s1.replace(s1.size()-1,1,1,.);// 结果hello,world.// 这里的6表示下标 5表示长度s1.replace(6,5,girl);// 结果hello,girl.// s1.begin(),s1.begin()5 是左闭右开区间s1.replace(s1.begin(),s1.begin()5,boy);// 结果boy,girl.couts1endl;}九、 string的大小写转换tolower()和toupper()函数 或者 STL中的transform算法方法一使用C语言之前的方法使用函数进行转换12345678910111213141516#include iostream#include stringusingnamespacestd;intmain(){string s ABCDEFG;for(inti 0; i s.size(); i ){s[i] tolower(s[i]);}coutsendl;return0;}方法二通过STL的transform算法配合的toupper和tolower来实现该功能123456789101112131415#include iostream#include algorithm#include stringusingnamespacestd;intmain(){string s ABCDEFG;string result;transform(s.begin(),s.end(),s.begin(),::tolower);coutsendl;return0;}十、 string的查找find1. size_t find (constchar* s, size_t pos 0) const; //在当前字符串的pos索引位置开始查找子串s返回找到的位置索引 -1表示查找不到子串 2. size_t find (charc, size_t pos 0) const; //在当前字符串的pos索引位置开始查找字符c返回找到的位置索引 -1表示查找不到字符 3. size_t rfind (constchar* s, size_t pos npos) const; //在当前字符串的pos索引位置开始反向查找子串s返回找到的位置索引 -1表示查找不到子串 4. size_t rfind (charc, size_t pos npos) const; //在当前字符串的pos索引位置开始反向查找字符c返回找到的位置索引-1表示查找不到字符 5. size_tfind_first_of (const char* s, size_t pos 0) const; //在当前字符串的pos索引位置开始查找子串s的字符返回找到的位置索引-1表示查找不到字符 6. size_tfind_first_not_of (const char* s, size_t pos 0) const; //在当前字符串的pos索引位置开始查找第一个不位于子串s的字符返回找到的位置索引-1表示查找不到字符 7. size_t find_last_of(const char* s, size_t pos npos) const; //在当前字符串的pos索引位置开始查找最后一个位于子串s的字符返回找到的位置索引-1表示查找不到字符 8. size_tfind_last_not_of (const char* s, size_t pos npos) const; //在当前字符串的pos索引位置开始查找最后一个不位于子串s的字符返回找到的位置索引-1表示查找不到子串1234567891011121314151617181920212223242526272829303132voidtest8(){string s(dog bird chicken bird cat);//字符串查找-----找到后返回首字母在字符串中的下标// 1. 查找一个字符串cout s.find(chicken) endl;// 结果是9// 2. 从下标为6开始找字符i返回找到的第一个i的下标cout s.find(i,6) endl;// 结果是11// 3. 从字符串的末尾开始查找字符串返回的还是首字母在字符串中的下标cout s.rfind(chicken) endl;// 结果是9// 4. 从字符串的末尾开始查找字符cout s.rfind(i) endl;// 结果是18-------因为是从末尾开始查找所以返回第一次找到的字符// 5. 在该字符串中查找第一个属于字符串s的字符cout s.find_first_of(13br98) endl;// 结果是4---b// 6. 在该字符串中查找第一个不属于字符串s的字符------先匹配dog然后bird匹配不到所以打印4cout s.find_first_not_of(hello dog 2006) endl;// 结果是4cout s.find_first_not_of(dog bird 2006) endl;// 结果是9// 7. 在该字符串最后中查找第一个属于字符串s的字符cout s.find_last_of(13r98) endl;// 结果是19// 8. 在该字符串最后中查找第一个不属于字符串s的字符------先匹配t--a---c然后空格匹配不到所以打印21cout s.find_last_not_of(teac) endl;// 结果是21}十一、 string的排序sort(s.begin(),s.end())1234567891011#include iostream#include algorithm#include stringusingnamespacestd;voidtest9(){string s cdefba;sort(s.begin(),s.end());couts:sendl;// 结果abcdef}十二、 string的分割/截取字符串strtok() substr()strtok():分割字符串123456789101112voidtest10(){charstr[] I,am,a,student; hello world!;constchar*split ,; !;char*p2 strtok(str,split);while( p2 ! NULL ){coutp2endl;p2 strtok(NULL,split);}}123456voidtest11(){string s1(0123456789);string s2 s1.substr(2,5);// 结果23456-----参数5表示截取的字符串的长度couts2endl;}到此这篇关于C中的String的常用函数用法的文章就介绍到这了