一、c语言字符串拼接函数
头文件包含#include<string.h>
函数原型:char *strcat(char *dest, const char *src);
参数:dest 为目标字符串指针,src 为源字符串指针。
strcat() 会将参数 src 字符串复制到参数 dest 所指的字符串尾部;dest 最后的结束字符 NULL 会被覆盖掉,并在连接后的字符串的尾部再增加一个 NULL。
返回值:返回dest 字符串起始地址。
note:dest 与 src 所指的内存空间不能重叠,且 dest 要有足够的空间来容纳要复制的字符串。
举例:
#include <stdio.h> #include <string.h> int main () { char str[80]; strcpy (str,"these "); strcat (str,"strings "); strcat (str,"are "); strcat (str,"concatenated."); puts (str); return 0; }
二、c语言格式化字符串函数
头文件:#include <stdio.h>
原型: int sprintf(char *str, char * format [, argument, ...]);
参数:str为要写入的字符串;format为格式化字符串,与printf()函数相同;argument为变量。
返回值:成功则返回参数str 字符串长度,失败则返回-1,错误原因存于errno 中。
注意:
除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数格式化字符串上。 printf()和sprintf()都使用格式化字符串来指定串的格式,在格式串内部使用一些以“%”开头的格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要的字符串。
sprintf()最常见的应用之一莫过于把整数打印到字符串中,如:
sprintf(s, "%d", 123); //把整数123打印成一个字符串保存在s中
sprintf(s, "%8x", 4567); //小写16进制,宽度占8个位置,右对齐
sprintf的作用是将一个格式化的字符串输出到一个目的字符串中,而printf是将一个格式化的字符串输出到屏幕。sprintf的第一个参数应该是目的字符串,如果不指定这个参数,执行过程中出现 "该程序产生非法操作,即将被关闭...."的提示。
sprintf()会根据参数format 字符串来转换并格式化数据,然后将结果复制到参数str 所指的字符串数组,直到出现字符串结束(‘\0‘)为止。关于参数format 字符串的格式请参考printf()。
三、c++ std::string类
1.append
2.运算符+
举例:
void StringAdd(string& des,string src) { des += src; } void StringAppend(string& des,string src) { des.append(src); }
这两种方法实现拼接,但是拼接的只能是字符串,不能是其他类型,如果拼接其他类型则显得不灵活。
四、c++ 11 to_string
std标准在c++11中提供了std::to_string系列函数,借助这个函数加上string+运算符可以轻松实现字符串拼接
五、c++字符串流
举例:
#include <sstream> std::ostringstream s; string str1 ="abc"; int iNum = 100; s<<str1<<"sdfal;dk;asld,"<<iNum; str1 = s.str();
任意类型拼接,不怕越界和溢出,安全可靠。
六、boost库boost::lexical_cast
举例:
#include <boost/lexical_cast.hpp> std::string query("select logged from login where id = " + boost::lexical_cast<std::string>(ClientID));
七、boost format方法
http://www.boost.org/doc/libs/1_66_0/libs/format/doc/format.html
关于各大字符串拼接方法效率比较
参考一篇博客:https://www.cnblogs.com/james6176/p/3222671.html
原文地址:https://www.cnblogs.com/alinh/p/9023422.html