我编写了一个自制的concat函数:
char * concat (char * str1, char * str2) {
for (int i=0; i<BUFSIZ; i++) {
if (str1[i]=='\0') {
for (int j=i; j<BUFSIZ; j++) {
if (str2[j-i]=='\0') return str1;
else str1[j]=str2[j-i];
}
}
}
}
现在,如果我要连接两个以上的字符串,即buf temp1 temp2, 我必须使用类似的东西:
strcpy(buf, concat(concat(buf,temp1),temp2));
请告诉我,有没有一种简单的方法来修改我的功能,以便接受许多参数?
答案 0 :(得分:4)
在C ++中使用字符串而不是char*
和函数:std::string result = std::string(buf) + temp1 + temp2;
答案 1 :(得分:3)
您正在寻找的功能是varargs
。这允许您编写一个接受可变数量参数的C函数。这就是printf
等函数的实现方式
char* concat(size_t argCount, ...) {
va_list ap;
char* pFinal = ... // Allocate the buffer
while (argCount) {
char* pValue = va_arg(ap, char*);
argCount--;
// Concat pValue to pFinal
}
va_end(ap);
return pFinal;
}
现在你可以使用可变数量的参数调用concat
concat(2, "hello", " world");
concat(4, "hel", "lo", " wo", "rld");
答案 2 :(得分:2)
很简单:
#include <string>
#include <iostream> // for the demo only
std::string concat(std::string const& a) {
return a;
}
template <typename... Items>
std::string concat(std::string const& a, std::string const& b, Items&&... args) {
return concat(a + b, args...);
}
int main() {
std::cout << concat("0", "1", "2", "3") << "\n";
}
在ideone看到它的实际操作:
0123
当然,您可以为效率添加一些重载。