1

自从我开始编程并决定学习 c++ 以来,我一直在使用 Java。我用 Java 写的内容是这样的:

showMessage("Hello world" + randomNumber);

它显示文本+整数或浮点数或其他。但它不会在 c++ 中工作。xCode 的错误消息:Invalid operands to binary expression ('const char *' and 'float')

干杯!

4

9 回答 9

2

你可以sprintf按照安东做一个,或者更多c++

std::stringstream ss;
ss << "Hello, world " << randomNumber;
showmessage(ss.str());

(sprintf 没有任何问题,特别是如果你使用它snprintf)。

于 2012-09-29T10:20:22.017 回答
1
    ostringstream os;
    os<<"HelloWorld"<<randomnumber;
    string s;
    s = os.str();

string s 现在包含您想要作为字符串对象的字符串。

于 2012-09-29T10:18:33.083 回答
1

您还可以使用boost::lexical_cast将数字转换为字符串,这是大多数情况下最快的方法:

showMessage("Hello world" + boost::lexical_cast<std::string>(randomNumber));

showMessage 声明是

void showMessage(cosnt std::string& message)
于 2012-09-29T10:18:46.853 回答
1

考虑添加一个能够将多种类型转换为 std::string 的新函数:

template<typename ty>
string to_str(ty t)
{
   stringstream ss; ss << t;
   return ss.str();
}

用法:

"Hello World " + to_str(123)
于 2012-09-29T10:19:07.063 回答
0

我不确定 c 风格的答案是否合适,但我已经在 cocos2d-x 问题中回答了它。

尝试在 Cocos2d-X C++ 中使用整数作为字符串的一部分设置 CCLabelTTF

于 2012-09-29T11:39:23.017 回答
0

定义一个类S。然后写

showMessage( S() << "Hello world" << randomNumber );

我已经S为 SO 编写了太多次类,创建它是一个很好的练习,因此,不提供源代码。

请注意,您可以合理地调用它StringWriter或类似的名称,然后typedef在函数调用中使用更简洁的代码。

于 2012-09-29T10:34:52.987 回答
0

使用 C++11:

showMessage("Hello world" + std::to_string(randomNumber));
于 2012-09-29T11:47:38.513 回答
-1

在 C++ 中,连接字符串和原语的标准方法是使用stringstream. 它实现了与 Java 相同的功能(还有更多功能)StringBuilder(当然它的 API 不同)。但是,如果您使用起来很舒服,cout那么您应该没问题。

例如。

#include <iostream>
#include <sstream>
#include <string>

using namespace std;

int main () {
  stringstream ss;
  ss << "Some string - " << 124; // build string    
  string str = ss.str(); // extract string

  cout << str << endl;
  return 0;
}

字符串流快速参考http://www.cplusplus.com/reference/iostream/stringstream/stringstream/

于 2012-09-29T10:26:26.337 回答
-1

您应该改为打印到 char* 中。

你可以做类似的事情

char* tempBuffer = new char[256];

sprintf_s(tempBuffer, 256, "Hello world %d", randomNumber);

showMessage(tempBuffer);
于 2012-09-29T10:13:23.890 回答