1. append函数

常用的函数原型:

  basic_string &append( const basic_string &str );basic_string &append( const char *str );basic_string &append( const basic_string &str, size_type index, size_type len );basic_string &append( const char *str, size_type num );basic_string &append( size_type num, char ch );basic_string &append( input_iterator start, input_iterator end );

append() 函数可以完成以下工作:

在字符串的末尾添加str,
在字符串的末尾添加str的子串,子串以index索引开始,长度为len
在字符串的末尾添加str中的num个字符,
在字符串的末尾添加num个字符ch,
在字符串的末尾添加以迭代器start和end表示的字符序列.

append函数常用的三个功能:

  • 直接添加另一个完整的字符串:如str1.append(str2);
  • 添加另一个字符串的某一段子串:如str1.append(str2, 11, 7);
  • 添加几个相同的字符:如str1.append(5, ‘.’);注意,个数在前字符在后.上面的代码意思为在str1后面添加5个"."
 //========================================
#include<iostream>
using namespace std;
//========================================
int main()  {  string str1="I like C++";  string str2=",I like the world.";  string str3="Hello";  string str4("Hi");  //====================================  str1.append(str2);  str3.append(str2, 11, 7);  str4.append(5, '.');  //====================================  cout<<str1<<endl;  cout<<str3<<endl;  cout<<str4<<endl;  system("pause");  return 0;
}
//========================================

运行结果为

I like C++,I like the world.
Hello World.
Hi.....

2. push_back函数

函数原型:

void push_back(value_type _Ch
);

功能:将字符添加到字符串的末尾,注意是字符而不是字符串。相当于basic_string &append( size_type num, char ch );,其中num=1。

my_str.push_back("123");//错误
my_str.push_back('1');//ok

3. 使用+=拼接

重载操作符原型:

basic_string<CharType, Traits, Allocator>& operator+=( value_type _Ch ); basic_string<CharType, Traits, Allocator>& operator+=( const value_type* _Ptr ); basic_string<CharType, Traits, Allocator>& operator+=( const basic_string<CharType, Traits, Allocator>& _Right );

使用示例:

std::string my_str = "holiday";
std::string my_str_add = "error" + "error";//错误
std::string my_str_add2 = my_str + "right";
std::string my_str_add3 = my_str + "right" + "right";
std::string my_str_add4 = "right" + my_str;
std::string my_str_add5 = "error" + "error" + my_str;//错误

+=操作符和append函数有什么区别呢,可以看下面的一个例子:

#include <iostream>
#include <string>
using namespace std;int main()
{{char szTest[] = "\0abc";string s;s += szTest;printf("size is %u\n", s.size());} {char szTest[] = "\0abc";string s;s.append(szTest, sizeof(szTest) - 1);printf("size is %u\n", s.size());} return 0;
}

结果分别是0和4, 不言而喻, string就是一个容器, 用来装字符, 对任何字符透明。

4. 使用sprintf拼接

使用示例:

#include <iostream>
#include <string>
#include <sys/time.h>
#include <sstream>
#include <stdio.h>
using namespace std;
#define OUT_IN_REPEATE_NUM 10000
#define IN_REPEATE_NUM 60string s1="abcedfg";
string s2="hijklmn";
string s3="opqrst";
void  plusTest(string& ret)
{for(int i=0; i<IN_REPEATE_NUM; i++){ret += s1;ret += s2;ret += s3;}
}
void  appendTest(string& ret)
{for(int i=0; i<IN_REPEATE_NUM; i++){ret.append(s1);ret.append(s2);ret.append(s3);}
}
//测试sprintf函数
void sprintfTest(string& ret)
{const size_t length=26*IN_REPEATE_NUM;char tmp[length];char* cp = tmp;size_t strLength=s1.length()+s2.length()+s3.length();for(int i=0; i<IN_REPEATE_NUM; i++){sprintf(cp,"%s%s%s", s1.c_str(), s2.c_str(),s3.c_str());cp+=strLength;}ret = tmp;
}void  ssTest(string& ret)
{stringstream ss;for(int i=0; i<IN_REPEATE_NUM; i++){ss<<s1;ss<<s2;ss<<s3;}ret = ss.str();
}
int main() {string ss, plus, append, sprintf;struct timeval sTime, eTime;gettimeofday(&sTime, NULL);for(int i=0; i<OUT_IN_REPEATE_NUM; i++){sprintf="";sprintfTest(sprintf);}gettimeofday(&eTime, NULL);long SprintfTime = (eTime.tv_sec-sTime.tv_sec)*1000000+(eTime.tv_usec-sTime.tv_usec); //exeTime 单位是微秒gettimeofday(&sTime, NULL);for(int i=0; i<OUT_IN_REPEATE_NUM; i++){append="";appendTest(append);}gettimeofday(&eTime, NULL);long AppendTime = (eTime.tv_sec-sTime.tv_sec)*1000000+(eTime.tv_usec-sTime.tv_usec); //exeTime 单位是微秒gettimeofday(&sTime, NULL);for(int i=0; i<OUT_IN_REPEATE_NUM; i++){ss="";ssTest(ss);}gettimeofday(&eTime, NULL);long SsTime = (eTime.tv_sec-sTime.tv_sec)*1000000+(eTime.tv_usec-sTime.tv_usec); //exeTime 单位是微秒gettimeofday(&sTime, NULL);for(int i=0; i<OUT_IN_REPEATE_NUM; i++){plus="";plusTest(plus);}gettimeofday(&eTime, NULL);long PlusTime = (eTime.tv_sec-sTime.tv_sec)*1000000+(eTime.tv_usec-sTime.tv_usec); //exeTime 单位是微秒cout<<"PlusTime is :   "<<PlusTime<<endl;cout<<"AppendTime is : "<<AppendTime<<endl;cout<<"SsTime is :     "<<SsTime<<endl;cout<<"SprintfTime is :"<<SprintfTime<<endl;if(ss==sprintf && append==plus && ss==plus){cout<<"They are same"<<endl;}else{cout<<"Different!"<<endl;cout<<"Sprintf: "<<sprintf<<endl;cout<<"ss:        "<<ss<<endl;cout<<"Plus:     "<<plus<<endl;cout<<"Append:"<<append<<endl;}}

原文链接:

  1. C++ string append方法的常用用法
  2. 实战c++中的string系列–string的连接(+= or append or push_back)
  3. c++拼接字符串效率比较(+=、append、stringstream、sprintf)
    4 . C++ string的+=与append, 小程序欣赏

C++中string append函数的使用与字符串拼接相关推荐

  1. Java 中String 类的不可变性与字符串拼接解析

    目录 一.String 类是不可变的 1.1 不可变的原因 1.2 不可变的好处 二.字符串的"+" 拼接 2.1 官方解释 2.2 append() 方法 2.3 具体实现 2. ...

  2. C++ string中的append函数

    C++ string中的append函数 1. append函数     常用的函数原型:       basic_string &append( const basic_string &am ...

  3. string::append函数用法

    在str字符串的末尾添加字符串 string& append (const string& str, size_t subpos, size_t sublen);//如果只有索引sub ...

  4. java中的string函数_java中string.trim()函数的作用实例及源码

    trim()的作用:去掉字符串首尾的空格. public static void main(String arg[]){ String a=" hello world "; Str ...

  5. C++ 中 string earse 函数的使用

    C++中string erase函数的使用(转载) erase函数的原型如下:(1)string& erase ( size_t pos = 0, size_t n = npos );(2)i ...

  6. java中trim_java中string.trim()函数的作用实例及源码

    trim()的作用:去掉字符串首尾的空格. public static void main(String arg[]){ String a=" hello world "; Str ...

  7. java中string.trim()函数的作用

    java中string.trim()函数的作用 trim的中文含义是修剪,通过其字面意思,我们不难理解这个函数是对字符串进行一定程度的修改删除.那么,具体是如何实现的呢? public static ...

  8. C++的string类型中关于append函数、push_back函数和+=运算符的区别

    部分内容翻译自 https://www.geeksforgeeks.org/stdstringappend-vs-stdstringpush_back-vs-operator-c/?ref=lbp 引 ...

  9. java中string.trim()函数

    string.trim()函数的作用: 将调用字符串中位于字符串前面和后面的空白符删除. 例如: String s=" hello world ";s.trim(); 输出: he ...

最新文章

  1. Observer Pattern分析
  2. 【我的Android进阶之旅】解决Android Studio启动时报错:Java 1.8 or later is required.
  3. (2 sat) hdu 1824
  4. 饭后为什么不宜喝冷饮?
  5. Docker安装gogs git仓库
  6. C++之操作符重载和运算符重载
  7. Linux下搭建FTP服务器笔记
  8. mysql杨辉三角_两个经典的小例子:杨辉三角和水仙花
  9. 计算机硬件系统和软件系统
  10. 苹果电脑裸机和不裸机的区别_将Kubernetes带到裸机边缘
  11. 2017.2.10自测(noip2002)
  12. 【Web缓存机制系列】2 – Web浏览器的缓存机制
  13. Powershell下设置环境变量
  14. Go:Unresolved dependency
  15. 魔兽地图编辑器插件YDWE的使用与基本设置
  16. [计算机通信网络]Packet tracer中laptop连接无线路由器
  17. linux getcwd 头文件,linux – rsync:getcwd():没有这样的文件或目录(2)
  18. VKD233HS是一款超小体积单键/1路单通道触摸触控IC DFN6封装2*2mm,适用TWS蓝牙耳机入耳检测/单键触摸,定位手环手表等
  19. PR AE安装成功后启动卡死的解决
  20. c# .net core 微信、支付宝H5支付链接获取,支付回调方法,退款方法小计

热门文章

  1. 配置一个nextjs_react项目
  2. 微信小程序this.data赋值时,页面视图层没有同步更新
  3. 跟着团子学SAP QM-供应商质量信息记录 QI01/QI02/QI03
  4. iOS 利用摄像头闪光灯测心率绘画心率图
  5. VaR风险价值:Stata及Python实现
  6. 解密混沌工程——混沌工程价值
  7. Word文档用通配符批量替换日期格式
  8. php 分页page
  9. SSM的小说上传下载网站含前后台-JAVA【数据库设计、源码、开题报告】
  10. faster rcnn源码解析