C++中的String的常用函数用法总结

C++中的String的常用函数用法总结一 string 的构造函数的形式 stringstr 生成空字符串 strings str 生成字符串为 str 的复制品 strings str strbegin strlen 将字符串 str 中从下标 strbegin 开始 长度为 strlen 的部分作为字符串初值 strings cstr char len 以 C string 类型 cstr 的前 char len 个字

一. string的构造函数的形式:


string 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("");  //生成""的复制品 string str3("12345", 0, 3);//结果为"123" string str4("012345", 5);  //结果为"01234" string str5(5, '1');  //结果为"11111" string str6(str2, 2);  //结果为"" 
#include 
     #include 
     using namespace std; void test1() { string str1; //生成空字符串 string str2(""); //生成""的复制品 string str3("12345", 0, 3);//结果为"123" string str4("0", 5); //结果为"01234" string str5(5, '1'); //结果为"11111" string str6(str2, 2); //结果为"" cout<<"str2:"< 
   
     cout<< 
    "str3:"< 
    
      cout<< 
     "str4:"< 
     
       cout<< 
      "str5:"< 
      
        cout<< 
       "str6:"< 
       
         int main() { test1(); 
        return 
        0; } 
        
       
      
     
   

这里写图片描述

二. string的大小和容量::

 1. size()和length():返回string对象的字符个数,他们执行效果相同。 2. max_size():返回string对象最多包含的字符数,超出会抛出length_error异常 3. capacity():重新分配内存之前,string对象能包含的最大字符数 
void test2() { string s(""); 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)
void test3() { // (A的ASCII码是65,a的ASCII码是97) // 前面减去后面的ASCII码,>0返回1,<0返回-1,相同返回0 string A("aBcd"); string B("Abcd"); string C(""); string D("123dfg"); // "aBcd" 和 "Abcd"比较------ a > A cout << "A.compare(B):" << A.compare(B)<< endl; // 结果:1 // "cd" 和 "Abcd"比较------- c > A cout << "A.compare(2, 3, B):" < 
   
     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)" < 
    
      0, 
     3, D, 
     0, 
     3) << endl; 
     // 结果:0 } 
     
   

这里写图片描述

四. string的插入:push_back() 和 insert()


void test4() { string s1; // 尾插一个字符 s1.push_back('a'); s1.push_back('b'); s1.push_back('c'); cout<<"s1:"< 
    
      // s1:abc 
     // insert(pos,char):在制定的位置pos前插入字符char s1.insert(s1.begin(), 
     '1'); 
     cout<< 
     "s1:"< 
     
       // s1:1abc } 
      
    

这里写图片描述

五、string拼接字符串:append() & + 操作符


void test5() { // 方法一:append() string s1("abc"); s1.append("def"); cout<<"s1:"< 
     
       // s1:abcdef 
      // 方法二:+ 操作符 
      string s2 = 
      "abc"; 
      /*s2 += "def";*/ 
      string s3 = 
      "def"; s2 += s3.c_str(); 
      cout<< 
      "s2:"< 
      
        // s2:abcdef } 
       
     

这里写图片描述

六、 string的遍历:借助迭代器 或者 下标法


void test6() { string s1("abcdef"); // 调用一次构造函数 // 方法一: 下标法 for( int i = 0; i < s1.size() ; i++ ) { cout< 
      
        cout< 
       
         // 方法二:正向迭代器 
        string::iterator iter = s1.begin(); 
        for( ; iter < s1.end() ; iter++) { 
        cout<<*iter; } 
        cout< 
        
          // 方法三:反向迭代器 
         string::reverse_iterator riter = s1.rbegin(); 
         for( ; riter < s1.rend() ; riter++) { 
         cout<<*riter; } 
         cout< 
          
         
        
      

这里写图片描述

七、 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();//删除字符串中所有字符
void test6() { string s1 = ""; // s1.erase(s1.begin()+1); // 结果: // s1.erase(s1.begin()+1,s1.end()-2); // 结果:189 s1.erase(1,6); // 结果:189 string::iterator iter = s1.begin(); while( iter != s1.end() ) { cout<<*iter; *iter++; } cout< 
      

八、 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)区间中的字符串替换为字符串s
void test7() { string s1("hello,world!"); cout< 
       
         // 结果:12 s1.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. 
        cout< 
         
       

九、 string的大小写转换:tolower()和toupper()函数 或者 STL中的transform算法


方法一:使用C语言之前的方法,使用函数,进行转换

#include 
          #include 
          using namespace std; int main() { string s = "ABCDEFG"; for( int i = 0; i < s.size(); i++ ) { s[i] = tolower(s[i]); } cout< 
        
          return 
         0; } 
        

方法二:通过STL的transform算法配合的toupper和tolower来实现该功能

#include 
          #include 
          #include 
          using namespace std; int main() { string s = "ABCDEFG"; string result; transform(s.begin(),s.end(),s.begin(),::tolower); cout< 
        
          return 
         0; } 
        

十、 string的查找:find


1. 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表示查找不到子串
void test8() { 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匹配不到,所以打印4 cout << s.find_first_not_of("hello dog 2006") << endl; // 结果是:4 cout << 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,然后空格匹配不到,所以打印21 cout << s.find_last_not_of("teac") << endl; // 结果是:21 }

十一、 string的排序:sort(s.begin(),s.end())


#include 
            #include 
            #include 
            using namespace std; void test9() { string s = "cdefba"; sort(s.begin(),s.end()); cout<<"s:"< 
          
            // 结果:abcdef } 
          

十二、 string的分割/截取字符串:strtok() & substr()


strtok():分割字符串

void test10() { char str[] = "I,am,a,student; hello world!"; const char *split = ",; !"; char *p2 = strtok(str,split); while( p2 != NULL ) { cout< 
                        NULL,split); } }            

这里写图片描述

void test11() { string s1("0"); string s2 = s1.substr(2,5); // 结果:23456-----参数5表示:截取的字符串的长度 cout< 
           
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/198189.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午3:36
下一篇 2026年3月26日 下午3:36


相关推荐

  • ubuntu20.04安装pycharm2021.3.3_ubuntu镜像安装

    ubuntu20.04安装pycharm2021.3.3_ubuntu镜像安装1.下载PyCharmhttps://www.jetbrains.com/pycharm/download/#section=linux这里我下载的是社区开源免费版2.解压PyCharm我下载的pycharm放到了下载文件夹中,在下载文件夹中启动终端,输入以下命令解压到当前文件夹tar-xzfpycharm-community-2021.1.3.tar.gz3.在opt目录下新建pycharm文件夹用于放置pycharm程序文件opt文件夹主要是:安装程序的引导和程序文件,如果缺少必

    2022年8月27日
    9
  • 约束条件(constraint)「建议收藏」

    约束条件(constraint)「建议收藏」1.为啥使用约束条件:约束条件也叫完整性约束条件,当对表中的数据做DML操作时会验证数据是否违反约束条件.如果违反了DML操作会失败.约束条件可以应用于表中的一列或几列,应用于整个表或几个表之间.约束条件分类:非空(NOTNULL),唯一(UNIQUE),主键(PRIMARYKEY),外键(FOREIGNKEY),检查(CHECK).其中NOTNULL只能应用于列.

    2022年10月13日
    4
  • 以太坊私有链搭建_以太坊节点减少

    以太坊私有链搭建_以太坊节点减少网上关于如何搭建私链的文章很多,但是看来看去都是一样的,千篇一律,想找点不一样,新鲜的知识很难,本文总结归纳那些文章的内容,从使用私链的角度出发写了一篇比较全面的博客,内容包含以下几点:windows单节点 windows多节点 linux创建节点并,windows远程使用linux节点 linux节点和Windows节点建立连接(网络原因,提供思路)1.windows单节…

    2022年10月8日
    4
  • python 请在微信客户端打开_如何实现‘请在微信客户端打开链接’

    python 请在微信客户端打开_如何实现‘请在微信客户端打开链接’想要实现请在微信客户端打开链接在代码中加入以下代码即可varua=navigator.userAgent.toLowerCase();varisWeixin=ua.indexOf(‘micromessenger’)!=-1;varisAndroid=ua.indexOf(‘android’)!=-1;varisIos=(ua.indexOf(‘iphone’)!=…

    2022年6月7日
    106
  • mongodb数据库去重命名_数据库数据去重语句

    mongodb数据库去重命名_数据库数据去重语句  最近写爬虫的时候遇到了一个问题,爬一个专利网站,主要工作流是先把列表页下所有的专利包括专利号、专利名称、URL放到数据库的一个文档info中,再抽取info中的URL进行爬取详情页,爬取列表页的信息做了一个去重,爬一个就在数据库里查一个。。效率就不提了(另一种我能想到的方法是先用线程池爬取一遍,把单个字典放入一个列表中,再采用set去重,但是线程池似乎没法返回子线程的值?),之后在详情页爬取工…

    2026年4月19日
    5
  • oracle 游标 定义,Oracle游标

    oracle 游标 定义,Oracle游标2019 05 13 游标 cursor 能够根据查询条件从数据表中提取一组记录 将其作为一个临时表置于数据缓冲区中 利用指针逐行对记录数据进行操作 隐式游标在执行 SQL 语句时 Oracle 会自动创建隐式游标 该游标是内存中处理该语句的数据缓冲区 存储了执行 SQL 语句的结果 通过隐式游标属性可获知 SQL 语句的执行状态信息 found 布尔型属性 如果 sql 语句至少影响到一行数据 值为 tru

    2026年3月20日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号