【问题标题】:How can I concatenate an int to a string? [duplicate]如何将 int 连接到字符串? [复制]
【发布时间】:2014-08-05 18:41:06
【问题描述】:

我已经做了一个小时左右的研究,但我找不到一种我真正理解的适合我的方法,因为我不了解缓冲区的工作原理。我试过 to_string 方法,我试过 .append() 方法,很明显,一个简单的连接方法。

我的代码:

 fileLog[fileLogIndex].append(playerTurn+":"+moveColumn);
 //fileLog[fileLogIndex] += playerTurn && ":" && moveColumn && ", ";

所以。这样做的目的,或者说我的想法,是跟踪我今天写的 connect 4 游戏中的每一个动作。这应该以上述格式附加每个动作。 PlayerTurn 存储为 int,1 表示玩家 1,2 表示玩家 2,moveColumn 变量是用户选择放下棋子的列。如果玩家 1 将一块棋子放入第 4 列,则想法是将“1:4”附加到变量中,然后将该行写入文件。

如您所见,我尝试了一些方法,例如 append,即使您看不到,我也尝试了 to_string() 方法,但我要么得到错误,要么 "1:1" 给出我在dos窗口中出现笑脸,或者在notepad++中打开文件时显示为null。

我不想使用我不理解的方法,所以如果这是另一个线程的重复,我很抱歉,我只是厌倦了盯着这 1 行代码并且用我的方法无济于事正试着。如果我必须使用缓冲区来执行此操作,那很好,但是有人可以用一些新手的话向我解释每行在做什么吗?

作为记录,我使用的是 Visual Studio 2010,而且我 90% 确定我没有 C++11,我在某处读到这就是 to_string 无法按预期工作的原因..

【问题讨论】:

  • 您能说明一下您是如何使用to_string() 的吗?错误是什么?
  • 原始类型的运算符不能重载,所以你有:int+char*+int也称为指向字符串":"的指针,增加了playerTurn+moveColumn,这是无效的如果总和小于 0 或大于 2。
  • @BenjaminLindley fileLog[fileLogIndex] += to_string(playerTurn) && ":" && to_string(moveColumn) && ", ";但我什至不确定与号是连接我所做方式的正确方法。我只是在尝试一些东西,他们没有给出任何错误。我收到错误消息:“错误:多个重载函数“to_string”实例与参数列表匹配。”
  • @jww 我查看了 C++ Concatenate string and int 页面,并尝试了其中的一些方法,但是,正如我之前所说,我找不到我理解的方法工作。似乎他们提到的许多方法不适用于我的 C++ 版本,或者我对它们的理解不足以让它们发挥作用。

标签: c++ string int concatenation tostring


【解决方案1】:

不使用 C++11 的 to_string 的 C++ 方法(即不使用 C 的缓冲区和 sprintf)是使用 ostringstream 构造字符串:

#include <sstream>

ostringstream out;
out << playerTurn << ":" << moveColumn;
fileLog[fileLogIndex] += out.str();

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-09-14
  • 2013-10-03
  • 2019-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-04
相关资源
最近更新 更多