C++ 将std::string和字符数组分成两半(高效)

C++ 将std::string和字符数组分成两半(高效),c++,c,string,C++,C,String,我们如何将std::string和以null结尾的字符数组拆分为两半,使它们具有相同的长度 请建议一种有效的方法。您可以假设原始字符串/数组的长度始终为偶数 我所说的高效是指在这两种情况下使用更少的字节数,因为使用循环和缓冲区的东西不是我想要的 std::string s = "string_split_example"; std::string half = s.substr(0, s.length()/2); std::string otherHalf = s.sub

我们如何将
std::string
以null结尾的字符数组拆分为两半,使它们具有相同的长度

请建议一种有效的方法。您可以假设原始字符串/数组的长度始终为偶数


我所说的高效是指在这两种情况下使用更少的字节数,因为使用循环和缓冲区的东西不是我想要的

    std::string s = "string_split_example";
    std::string half = s.substr(0, s.length()/2);
    std::string otherHalf = s.substr(s.length()/2);

    cout << s.length() << " : " << s << endl;
    cout << half.length()  << " : " << half << endl;
    cout << otherHalf .length()  << " : " << otherHalf  << endl;

在线演示:

你已经收到C++答案,但这里有个C答案:

int len = strlen(strA);
char *strB = malloc(len/2+1);
strncpy(strB, strA+len/2, len/2+1);
strA[len/2] = '\0';

显然,这将使用
malloc()
为第二个字符串分配内存,您必须在某个时候
free()

字符数组如何?@Tretwick Marian:将字符数组转换为
std::string
,然后进行拆分!“我所说的高效是指在这两种情况下使用更少的字节数,因为使用循环和缓冲区的东西不是我想要的”。您打算如何存储这些新字符串?拆分它们时,最终结果必须至少多一个字节才能存储额外的空终止符,这意味着您需要重新分配,这意味着您必须复制一个字节数组。
int len = strlen(strA);
char *strB = malloc(len/2+1);
strncpy(strB, strA+len/2, len/2+1);
strA[len/2] = '\0';