char数组字符串混淆

char array string confusion

我有麻烦了,我自己无法解决这个问题..

// string::operator+= vs +
#include <iostream>
#include <string>
using namespace std;


int main ()
{
    unsigned char array[6]= { 'f','o','o','b','a','r' };
    string name ("works and not");
    cout << name<< endl;
    name ="";
    for(int i=0; i < 6;  i++)
        name += array[i];
    cout << "working: "<< name << endl;
    name ="";
    name = array[1] + array[0] + array[0] + array[3] + array[4] + array[5]; 
    cout <<"not working: "<<  name << endl;
    return 0;
}

现在我明白了 += 表示法中有一些隐藏的转换,我知道加号添加了我的字符的整数, 并只转换最终值(到 'p')。

但我需要将各种字符组合成一个字符串..如果可能的话在一行中.. 因为我需要不止一次这样做(600++ 次)而且它已经把代码弄乱了。

因为这是我第一次,而且很可能是最后一次需要将我的 "array" 值转换为字符串,顺便说一下,我宁愿不更改我的 char 数组。

谢谢!

name = array[1] + array[0] + array[0] + array[3] + array[4] + array[5]; 

要求在一行中完成所有这些是您的问题。 = 的右侧在 name 甚至被考虑之前被评估。而且,是的,因为这些都是 unsigned char,所以你得到的只是 unsigned char 加法。

如果 你的 array 属于 char,那么会有一条捷径:

name = std::string() + array[1] + array[0] + array[0] + array[3] + array[4] + array[5];

现在,RHS 由一系列应用于(临时)std::stringoperator+ 构建而成,并将最终的串联结果复制分配到 name 中。很丑但是...

但是您不能将此与您的 unsigned char 一起使用,因为 std::stringunsigned char 没有 operator+。您基本上已经将自己设计成一个角落,所以,如果您不能使用循环或首先使用 std::string,那么您就是 SOL。

不过,如果您不介意进行一些重构,这里有一个 2015 年的解决方案:

#include <iostream>
#include <string>

int main()
{
    unsigned char array[6] = { 'f','o','o','b','a','r' };
    std::string name;

    for (auto i : {1,0,0,3,4,5})
        name += array[i];

    std::cout << name << '\n';
}

(live demo)