修改自制的concat函数,使其接受两个以上的参数

时间:2012-02-09 15:55:54

标签: c++ c char

我编写了一个自制的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));

请告诉我,有没有一种简单的方法来修改我的功能,以便接受许多参数?

3 个答案:

答案 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

当然,您可以为效率添加一些重载。