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

How can I create a string from a single character?

本文关键字:创建 字符串 字符 单个      更新时间:2023-10-16

我有一个单一的char值,我需要将其转换为std::string。我该怎么做呢?

我知道如何走相反的路,从std::string对象检索char:您只需要在适当的位置索引字符串。例如:str[0]将检索字符串中的第一个字符。

但是我怎么走相反的路呢?我想要这样的:

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

您可以使用以下任何/所有方式从单个字符创建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;
    

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

std::string str(1, ch);

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

#include <sstream>
#include <string>
std::stringstream ss;
std::string target;
char mychar = 'a';
ss << mychar;
ss >> target;

无论您拥有多少char变量,此解决方案都将起作用:

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

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

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

更新:

问得好,James和GMan。刚刚搜索了可免费下载的"新C语言标准";德里克·琼斯(Derek M. Jones)为"指针past"撰写的文章;我的第一个点击是:

如果表达式p指向an元素和表达式Q指向最后一个元素的指针表达式Q+1比较大于P…尽管Q+1可以Not指向数组的元素对象…

在分段架构上指针在结束后递增段导致地址换行分段式建筑围绕着这一段的开头(通常)地址0)。如果数组是在这样一个段内分配,要么实现必须保证数组后面还有空间总会有一个过去的结局地址,或者使用其他的处理的实现技术这种情况下(例如,如果分段使用是指针表示的一部分,一个特殊的过了末端段的

C关系操作符模型允许指向要在其中处理的对象的指针与索引到数组的方式相同对象。关系比较索引之间分为两个不同数组对象(不同时存在)(较大对象的子对象)很少标准有什么意义吗不定义对指针的支持。有些应用程序确实需要利用亲属的信息中不同对象的位置存储。然而,这种用法并非如此被认为具有足够的普遍性的实用程序,供委员会指定定义行为的模型…

大多数实现不执行检查在对值进行任何操作之前具有指针类型的。大多数处理器使用相同的说明执行关系比较使用时涉及指针类型对于算术类型。的处理器使用分段存储器体系结构中,指针值是经常出现的用两个分量表示,a段号和偏移量这段。这样做的结果是代表性是有很多分配存储的好处对象,使其适合于单个段(即,存储一个对象不跨越段边界)。一个好处是涉及生成的机器代码的一些关系操作符,它只需要检查段偏移分量。这可能会导致这样的情况P>= q为假,但P>Q为真,当p和q指向不同的对象时

这适用于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;
}

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

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

这使用了std::string的std::initializer_list构造函数

我不太了解Java,但在c++中最接近ch + ""的可能是std::string{} + ch。注意,""不是std::string,并且不能重载基本类型的操作符,因此ch+""不可能导致std::string

但是,std::string{} + ch包含两个字符串。我想编译器可以将临时代码优化掉,不过从一个字符构造一个字符串是完全可以的:std::string(1,ch) .

关于std::string的其他构造函数,请参考https://en.cppreference.com/w/cpp/string/basic_string/basic_string。

可以设置一个字符串等于一个字符。

#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