如何在c ++中存储带有字符串和整数串联的变量

时间:2014-12-16 02:41:03

标签: c++ string concatenation

这似乎是一个非常小的问题,但我对c ++很新,我发现这个小任务非常困难。我有一个名为draw_text(const char * text)的函数,它在我的openGL窗口中输出变量“text”。当我打开函数时,让我们说draw_text(“example”),然后它将文本示例完美地绘制到我的openGL窗口中。但是,我一直试图给功能输入“得分:”+得分。其中“得分:”是一个字符串,如图所示打印,得分是包含游戏当前得分的整数变量。我知道这个实现在java中运行正常,但在c ++中它打印出随机文本,我在代码中找不到任何地方。例如当我第一次运行我的程序时,它会在“score:”+得分打印的位置打印出“r_text.png”,然后文本不断变换为另一个随机单词。

我找到了几种将整数转换为字符串的方法,但是我找不到对我的情况有用的方法。我已经尝试了几种流方法,但它们只在控制台中打印出文本,它们无法帮助存储带有串联串的变量。

我尝试过使用sprintf()方法

char stringResult[21]; // enough to hold all numbers up to 64-bits
sprintf(stringResult, "%d", score);
std::string result = "Score: " + stringResult;

但它给编译时错误说明类型'const char [8]'和'char [21]'的无效操作数到二进制'perator +'

我尝试过“得分:”+(字符)得分,但这开始打印随机文本就像我的第一次尝试一样,是否有人知道为什么打印出这个文本而不是我的输入。

我尝试了itoa()方法,但在c ++中无法识别

我尝试过使用strcat()方法

char str[21];
strcpy (str,"Score: ");
strcat (str,(char)score);

但这会在我的控制台中出现一个错误,指出从'char'到'const char *'

的无效转换

我的C ++版本无法识别方法string()和to_string,即使我已经包含了库。

在C ++中是否有一种非常简单的方法可以在任何地方找不到,或者尝试执行最简单任务之一的语言是否令人沮丧。

我对draw_text()的方法在下面给出

void CTetrisGame::draw_text(const char* text)
{
    size_t len = strlen(text);
    for (size_t i=0;i<len;i++)
        glutStrokeCharacter(GLUT_STROKE_ROMAN, text[i]);
}

2 个答案:

答案 0 :(得分:1)

理想情况下,如果您是using C++11,则可以使用std::to_string,这可以立即解决您的问题。

但是,您也可以使用stringstreams将值转换为字符串:

#include <sstream>

const std:string ConvertIntToString(const int input_int)
{
  std::stringstream ss;
  ss << input;
  return ss.str();
}

然后你应该能够将它与你的“Score:”字符串连接起来。

还有几种方法可以将int转换为字符串,以回答this question

编辑:在回答评论中的问题时,您可以通过调用string::c_str()将字符串转换为const char *。

答案 1 :(得分:0)

如果您有C ++ 11编译器,可以尝试std::to_string

std::string result = "Score: " + std::to_string (score);