我有一个单个的 char
值,现在需要将它转换成 std::string
。请问怎么做?
我知道如何反过来,从 std::string
对象中获取 char
: 只需要在适当的位置对字符串进行索引即可。例如: str[0]
将检索字符串中的第一个字符。
但是如何进行相反的操作呢?我想要这样的效果:
char c = 34;
std::string s(c);
...但这并不起作用(字符串始终为空)。
我有一个单个的 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);
std::string(x, 3)
。 - Rob Kennedy你可以尝试使用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);
更新:
詹姆斯和GMan提出了一个好问题。我在免费下载的Derek M. Jones的《新C标准》中搜索“指针超过”时,第一个命中的结果是:
如果表达式P指向数组对象的一个元素,而表达式Q指向同一数组对象的最后一个元素,则指针表达式Q+1与P相比较大...即使Q+1并不指向数组对象的任何元素...
在分段体系结构中,将指针递增超过段的末尾会导致地址从该段的末尾回绕到该段的开头(通常为地址零)。如果在这样的段内分配了数组,则实现必须确保数组之后有足够的空间,以便存在一个超过末尾地址的地址,或者使用其他实现技术来处理此情况(例如,如果所使用的段是指针表示的一部分,则可能会分配一个特殊的超过末尾段值)...
C关系运算符模型使得对象的指针可以像数组对象的索引一样处理。两个不是更大对象的子对象的索引之间的关系比较很少有任何意义,标准也未定义指针的支持。某些应用程序确实需要利用存储中不同对象的相对位置信息。然而,委员会认为这种用法不足以具有足够的通用性,无法指定定义行为的模型...
大多数实现在指针类型的任何值操作之前都不执行检查。大多数处理器使用与算术类型相关的指令来执行涉及指针类型的关系比较。对于使用分段存储器体系结构的处理器,指针值通常使用两个组件表示,即段号和该段内的偏移量。这种表示的一个后果是,有许多好处可以将对象的存储分配在单个段内(即,对象的存储不跨越段边界)。其中之一是优化涉及某些关系运算符的生成机器代码的情况,该运算符仅需要检查段偏移量组件。这可能会导致p>= q为false,但p> q为true,当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构造函数。
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
string s = string() + 'a'
; 这行代码的意思是创建一个空字符串,并在其后面添加字符'a'。 - doctorramstring s = {c};
或string s({c});
或string s{c};
。链接 https://ideone.com/eFZTFY - Remy Lebeau