【问题标题】:char array string confusionchar数组字符串混淆
【发布时间】:2015-03-01 18:24:09
【问题描述】:

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

// 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++ 次)这样做,而且它已经把代码弄乱了。

因为这是第一次,而且很可能是最后一次我需要将我的“数组”值转换为字符串,所以我宁愿不更改我的 char 数组。

谢谢!

【问题讨论】:

标签: c++ string char type-conversion


【解决方案1】:
name = array[1] + array[0] + array[0] + array[3] + array[4] + array[5]; 

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

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

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

现在 RHS 是从一系列 operator+ 构建的,应用于(临时)std::string,并将最终连接的结果复制分配到 name。这很丑,但是...

但是您不能将它与您的unsigned chars 一起使用,因为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)

【讨论】:

  • 哦.. 有时候很简单,对我来说使用签名字符实际上不是太难了,多一行代码.. 没什么大不了的,但这对我来说不是一点都不介意!所以谢谢一百万!!!!
  • @itsid:没问题。作为奖励,我在我的答案中加入了一个合适的现代解决方案。
  • 哦,我喜欢 2015 年的解决方案! ...嗯..我想是时候加强了:D
猜你喜欢
  • 2017-09-20
  • 1970-01-01
  • 1970-01-01
  • 2011-11-08
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多