c++ 如何从单个字符创建字符串?

zlwx9yxi  于 2023-02-17  发布在  其他
关注(0)|答案(9)|浏览(222)

我有一个char值,我需要将它转换成一个std::string。我该怎么做?
我知道如何反其道而行之,从std::string对象中检索char:你只需要在适当的位置索引字符串。例如:str[0]将检索字符串中的第一个字符。
但我该怎么做呢?我想要这样的东西:

char c = 34;
std::string s(c);

...但这不起作用(字符串始终为空)。

ncecgwcz

ncecgwcz1#

您可以使用以下任意/所有方法从单个字符创建std::string

std::string s(1, c);

std::cout << s << std::endl;
std::string s{c};

std::cout << s << std::endl;
std::string s;
s.push_back(c);

std::cout << s << std::endl;
gv8xihay

gv8xihay2#

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

std::string str(1, ch);
pod7payv

pod7payv3#

你可以试试stringstream,下面是一个例子:

#include <sstream>
#include <string>

std::stringstream ss;
std::string target;
char mychar = 'a';
ss << mychar;
ss >> target;
yrwegjxp

yrwegjxp4#

无论您拥有多少char变量,此解决方案都有效:

char c1 = 'z';
char c2 = 'w';
std::string s1{c1};
std::string s12{c1, c2};
nhjlsmyf

nhjlsmyf5#

你仍然可以使用字符串构造函数,它有两个迭代器:

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

更新日期:

问得好,James和Gman。刚刚在Derek Mjones的免费下载的“新C标准”中搜索了“指针过去”,我的第一个命中是:
如果表达式P指向数组对象的一个元素,而表达式Q指向同一数组对象的最后一个元素,则指针表达式Q+1比较结果大于P ...,即使Q+1不指向数组对象的一个元素...
在分段式体系结构上,递增指针超过段的末尾会导致地址将分段式体系结构绕回该段的开头如果数组是在这样的段中分配的,则实现必须确保在数组之后有空间,以便在结束地址之后有一个1,或者它使用一些其他的实现技术来处理这种情况(例如,如果使用的段是指针表示的一部分,则可以分配超过结束段值的特殊段)...
C关系运算符模型使指向对象的指针能够像指向数组对象的索引一样被处理。(不是一个更大对象的两个子对象)很少有任何意义,标准也没有定义对指针的这种支持。一些应用程序确实需要利用存储器中不同对象的相对位置信息。然而,这种用法被认为没有足够的普遍效用,委员会无法指定一种模式来界定行为.。
大多数实现在对具有指针类型的值进行任何操作之前不执行检查。大多数处理器使用与它们用于算术类型相同的指令来执行涉及指针类型的关系比较。对于使用分段存储器体系结构的处理器,指针值通常使用两个分量来表示,段号和该段内的偏移量。这种表示法的结果是,为对象分配存储空间,使其适合于单个段,这样做有许多好处(例如,对象的存储不跨越段边界)。一个好处是优化涉及为某些关系运算符生成的机器码,它只需要检查段偏移分量。当p和q指向不同的对象时,这可能导致p〉= q为假但p〉q为真的情况。

neekobn8

neekobn86#

这可以在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;
}
slwdgvem

slwdgvem7#

在大多数情况下,您可以只使用{ch}

std::string s = {ch}; // works
infix.push({ch}); // works

它使用std::stringstd::initializer_list构造函数。

uqxowvwt

uqxowvwt8#

我对Java了解不多,但在C++中最接近ch + ""的可能是std::string{} + ch。注意,""不是std::string,并且您不能重载基本类型的操作符,因此ch+""不可能导致std::string
然而,std::string{} + ch包含了2个字符串,我想编译器可以优化掉临时变量,不过要从一个字符构造一个字符串,这是非常好的:std::string(1,ch) .
对于std::string的其他构造函数,请参考https://en.cppreference.com/w/cpp/string/basic_string/basic_string

cvxl0en2

cvxl0en29#

可以将字符串设置为等于char。

#include <iostream>
#include <string>

using namespace std;

int main()
{
   string s;
   char one = '1';
   char two = '2';
   s = one;
   s += two;
   cout << s << endl;
}

./测试
12

相关问题