Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我在字符串中添加数字时,它会在c++;?_C++_String_Int - Fatal编程技术网

C++ 为什么我在字符串中添加数字时,它会在c++;?

C++ 为什么我在字符串中添加数字时,它会在c++;?,c++,string,int,C++,String,Int,当我尝试向字符串添加文本时,会得到随机值 代码: #包括 使用名称空间std; int main() { cout老实说,我不知道通过将int添加到字符串来实现什么目的。如果要添加333+4,则需要将字符串解析为int,如下所示: 编辑:打字错误 #包括 using namespace std; int main() { cout << std::stoi("333") + 4; } 使用名称空间std; int main() { cout“333”是一个常量字符[4]而

当我尝试向字符串添加文本时,会得到随机值

代码:

#包括
使用名称空间std;
int main()
{

cout老实说,我不知道通过将int添加到字符串来实现什么目的。如果要添加333+4,则需要将字符串解析为int,如下所示:

编辑:打字错误 #包括

using namespace std;

int main()
{
    cout << std::stoi("333") + 4;
}
使用名称空间std;
int main()
{

cout
“333”
是一个
常量字符[4]
而不是您可能期望的
std::string
(顺便说一句,它仍然没有
运算符+
用于
int
)。添加4,您将其添加到
常量字符*
,然后将指针移动
4*sizeof(char)
字节,使其指向内存中包含垃圾。

之所以发生这种情况,是因为这两种类型不同,而且加法运算符的工作方式与您预期的不一样。

如果要将字符串文本“333”与int值4连接起来,只需使用count,如:

cout << "333" << 4; // outputs: 3334
注意:使用stoi()时:如果字符串还包含文字,则转换将从字符串开头获取整数值,或者在字符串以文字开头时引发错误:

cout << stoi("333ab3") + 4; // same as 333 + 4, ignoring the rest, starting a
cout << stoi("aa333aa3") + 4; // raise error as "aa" can't be casted to int

cout当您想要在文本中添加文本时,解决方案是使用适当的类型:

cout << std::string( "333" ) + "4";

我只是好奇:你到底希望得到什么?-除了糟糕的
使用名称空间std;
,这不可编译。我糟糕的输入错误:std::stoi(“333”)+4、 它们不是不兼容的,但执行的操作是指针算术,而不是加法或串联。OP希望将文本添加到字符串,而不是数字number@Quentin它们不是不兼容的,没错,但即使这是一个合法的指针算术运算,你也应该看到这并不是提问者所期望的它们不适合获得预期的结果。只要结果不是预期的结果,您可以确定他不需要指针算术(即使询问者也没有指定).所以,我的观点是,你不能把狗和鸟结合在一起得到飞机…回答更新,谢谢你的指点。这可能误导了其他人,也许,因为我没有那么明确。
cout << stoi("333ab3") + 4; // same as 333 + 4, ignoring the rest, starting a
cout << stoi("aa333aa3") + 4; // raise error as "aa" can't be casted to int
cout << std::string( "333" ) + "4";
using namespace std::string_literals;
cout << "333"s + "4"s;