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::string
的 operator+
构建而成,并将最终的串联结果复制分配到 name
中。很丑但是...
但是您不能将此与您的 unsigned char
一起使用,因为 std::string
和 unsigned 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)
我有麻烦了,我自己无法解决这个问题..
// 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::string
的 operator+
构建而成,并将最终的串联结果复制分配到 name
中。很丑但是...
但是您不能将此与您的 unsigned char
一起使用,因为 std::string
和 unsigned 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';
}