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';