将std :: string和一个字符数组拆分成两半(高效)

时间:2011-02-12 08:02:10

标签: c++ c string

我们如何将std :: string和 null终止字符数组分成两半,使两者具有相同的长度?

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

有效地,我的意思是在两种情况下使用较少的字节数,因为使用循环和缓冲区的东西不是我想要的。

2 个答案:

答案 0 :(得分:3)

    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;

输出:

20 : string_split_example
10 : string_spl
10 : it_example

在线演示:http://www.ideone.com/fmYrO

答案 1 :(得分:3)

你已经收到了一个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()