how to store a variable with a concatenation of a string and an integer in c++
这似乎是一个非常小的问题,但我对c ++很新,我发现这个小任务非常困难。我有一个名为draw_text(const char * text)的函数,它在我的openGL窗口中输出变量"text"。当我打开函数时,让我们说draw_text("example"),然后它将文本示例完美地绘制到我的openGL窗口中。但是,我一直试图给功能输入"得分:"+得分。其中"得分:"是一个字符串,如图所示打印,得分是包含游戏当前得分的整数变量。我知道这个实现在java中运行正常,但在c ++中它打印出随机文本,我在代码中找不到任何地方。例如当我第一次运行我的程序时,它会在"score:"+得分打印的位置打印出"r_text.png",然后文本不断变换为另一个随机单词。
我找到了几种将整数转换为字符串的方法,但是我找不到对我的情况有用的方法。我已经尝试了几种流方法,但它们只在控制台中打印出文本,它们无法帮助存储带有串联串的变量。
我尝试过使用sprintf()方法
1 2 3
| 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()方法
1 2 3
| char str[21];
strcpy (str,"Score:");
strcat (str,(char)score); |
但这会在我的控制台中出现一个错误,指出从'char'到'const char *'的无效转换
在我的C ++版本中无法识别方法string()和to_string,即使我已经包含了库。
是否有一种非常简单的方法可以在C ++中执行此操作,我无法在任何地方找到它,或者尝试执行最简单任务之一的语言是否令人沮丧。
我的draw_text()方法如下
1 2 3 4 5 6
| 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]);
} |
-
std :: string result ="Score:"+ std :: string(stringResult);
-
但是,伙计,你为什么不到处使用C ++输入法呢?为什么你需要sprintf()?
-
可能重复的C ++连接字符串和int
-
en.cppreference.com/w/cpp/string/basic_string/to_string
-
@RetoKoradi不,不完全,但这个基本的C ++东西看起来总是相似:)
-
@ user3159253根据问题,用户没有使用C ++ 11,因此to_string不可用。
-
可能,他不知道他在用什么:)
-
谢谢,我不再收到连接代码的任何错误。但是,现在我收到的错误是我正在调用draw_text(result),但是draw_text只能接受类型为const char *的输入。我现在如何将结果转换为const char *?
-
当然有很多方法可以将数字转换为字符串,使用前面提到的配方中的boost::lexical_cast<>(),std :: ostringstream由boost :: lexical_cast内部使用AFAIR ...
-
请阅读一本不错的C ++书!否则,您必须在代码的每一行都提出问题。
-
还有@ user3159253你到处使用c ++方法是什么意思?
-
printf()是来自那些黑暗时代的C函数,当程序员必须在工作表上编写程序时,然后经过特殊训练的人在丑陋的终端上键入这些程序。
-
我已经阅读了几个关于这个问题的pdf文件,但它并没有帮助解决我的具体问题,我现在需要做的就是将结果转换为方法draw_text的合适类型。或者你能告诉我如何更改draw_text(const char * input)以便它可以输入string类型,即draw_text(std :: string input)
-
如果函数采用const char*参数,那么您不能简单地传递std::string。 std::string具有c_str()方法,该方法返回"std :: string的C表示"。
-
我尝试使用draw_text(result.c_str())运行该函数,它完美地运行:D
理想情况下,如果您使用的是C ++ 11,则可以使用std :: to_string,它可以立即解决您的问题。
但是,您也可以使用stringstreams将值转换为字符串:
1 2 3 4 5 6 7 8
| #include <sstream>
const std:string ConvertIntToString(const int input_int)
{
std::stringstream ss;
ss << input;
return ss.str();
} |
然后,您应该能够将其与"Score:"字符串连接起来。
在回答这个问题时,还有几种方法可以将int转换为字符串。
编辑:在注释中回答您的问题,您可以通过调用string :: c_str()将字符串转换为const char *。
-
我将我的问题分解为两个步骤,将得分转换为字符串,将该字符串与"得分:"连接起来。我之前尝试过你的方法并且它工作正常,但我仍然不知道如何将字符串与"Score:"连接起来。我找到了一种方法来连接并有效地从另一个用户注释转换为字符串,但是我的draw_text()不接受结果作为输入。
-
draw_text(const char * input)不接受连接字符串作为输入,因为结果字符串的类型为std :: string,但draw_text只能接受类型为const char *的输入。但我不明白当"example"也是std :: string类型时draw_text("example")如何正常工作?
-
"example"不是std :: string类型。这个问题应该可以解决你的困惑。 :)
-
非常感谢,代码现在完美无缺:D
-
只是出于好奇,是std :: string类型或const char *类型的对象"示例",两者之间有什么区别。因为显然甚至printf()方法只接受类型为const char *的输入。还有一种方法可以从const char *转换为std :: string
-
正如我所链接的问题所述,"example"将是const char *。 std :: string和const char *之间的区别在这个问题中得到了很好的解释 - 我会解释自己,但这比我做得好得多。 :)主要的外卖点是你应该在任何地方使用std :: string。它更现代,更容易处理。您可以使用std :: string构造函数之一将const char *转换为std :: string。
-
谢谢Richard,最后一个问题,我定义时应该使用什么大小的值,char stringResult [size]
-
这是更喜欢使用std :: string的原因之一 - 你不必担心那种事情。我真的建议将整个流转换为使用std :: string,并且只在需要将const char *传递给函数时调用string :: c_str。但是,要回答你的问题,它应该只是你认为你需要的那么多角色。
如果你有一个C ++ 11编译器,你可以尝试std :: to_string。
1
| std::string result ="Score:" + std::to_string (score); |