首选从char(非char *)到std :: string的转换

时间:2011-01-18 20:29:41

标签: c++ string char type-conversion

我有一个char,一个普通的老字,我想变成std::string。当然不存在std::string(char)。我可以创建一个char数组并将其复制,我可以通过字符串流或许多其他小环形路径。目前,我更喜欢boost::lexical_cast,但即便如此,对于这个简单的任务来说,这似乎太冗长了。那么首选方式是什么?

5 个答案:

答案 0 :(得分:75)

std::string有一个构造函数,它接受一个数字和一个字符。角色将重复给定的次数。因此,您应该使用:

std::string str(1, ch);

答案 1 :(得分:5)

只使用带有char的重载?

即。 string(1, 'A')

答案 2 :(得分:3)

您仍然可以使用带两个迭代器的字符串构造函数:

char c = 'x';
std::string(&c, &c + 1);

<强>更新

好问题詹姆斯和GMan。刚刚搜索免费下载的“新C标准”由Derek M. Jones为“指针过去”,我的第一个热门是:

  

如果表达式P指向一个   数组对象的元素和   表达Q指向最后一个   同一个数组对象的元素   指针表达式Q + 1比较   大于P ......即使Q + 1确实如此   不指向数组的元素   对象......

     

在分段架构上   将指针递增到结尾   段导致地址换行   分段的建筑到周围   该段的开头(通常是   地址为零)。如果是一个数组   在这样一个部分内分配,   要么实施必须确保   阵列之后有空间   在结束时有一个人   地址,或者它使用其他一些   处理的实现技术   这种情况(例如,如果使用了段   是指针表示的一部分,   结束段后的特殊人物   可能会分配值... ...

     

C关系运算符模型启用   指向要处理的对象的指针   与索引到数组的方式相同   对象。关系比较   索引之间分为两个不同的   数组对象(不是两者都有   很少有一个较大对象的子对象   有任何意义和标准   没有为指针定义这样的支持。   某些应用程序确实需要使用   有关亲属的信息   不同物体的位置   存储。但是,这种用法并非如此   被认为是足够的一般   委员会指定的用途   定义行为的模型......

     

大多数实现不执行任何检查   在对价值进行任何操作之前   有指针类型。大多数处理器   使用相同的说明   进行关系比较   涉及他们使用的指针类型   对于算术类型。对于处理器   使用分段内存   体系结构,指针值通常是   使用两个组件表示,a   段号和一个偏移量   那个部分。这样做的结果   代表是有很多   分配存储的好处   这些物体适合于   单段(即,存储用于   对象不跨越段   边界)。一个好处是   涉及生成的优化   某些机器的代码   关系运算符,只需要   检查段偏移组件。   这可能导致这种情况   p> = q为假但p> 1。问是的,   当p和q指向不同的对象时。

答案 3 :(得分:2)

这适用于gcc C ++ 4.9.2(http://ideone.com/f3qhTe

#include <iostream>
using namespace std;

int main() {
    // your code goes here
    std::string test;

    test = (char) 76;
    test += (char) 77;
    test += (char) 78;
    test += (char) 79;

    std::cout << "test contains: " << test << std::endl;
    return 0;
}

答案 4 :(得分:1)

要添加到答案中,您只需使用初始化列表即可

std::string str = {ch};