0

我想首先说我几乎没有使用 C++ 的经验,但是这个学期我正在上大学课程,只是有点乱搞,所以我为这门课做好了更好的准备。我知道大量的 Java,但几乎不知道 C++。

基本上,我想让一些整数成为字符串的一部分,这些整数将进入字符串 2D 数组。然后我想打印出来只是为了确保所有东西都在数组中......我意识到第二个 for 循环并不是真正必要的,但我还是把它放在那里。

我的问题是尝试执行以下操作时不断收到错误消息:

myArray[i][j] = "(" << i << "," << j << ")";

具体来说,它告诉我:

error: invalid operands of types 'const char*' and 'const char [2]' to binary 
       'operator+'

我不明白这个错误,也不知道如何解决它......

这就是我所拥有的。

int height = 5;
int width = 5;
string myArray[height][width];

for (int i = 0; i < height; ++i) {
    for (int j = 0; j < width; ++j) {
        myArray[i][j] = "(" << i << "," << j << ")";
    }
}

for (int i = 0; i < height; ++i) {
    for (int j = 0; j < width; ++j) {
        cout << myArray[i][j] << "  ";
    }
}

我只想知道如何修复该错误,然后我还想具体了解为什么我会收到所说的错误。谢谢!

4

2 回答 2

4

您会收到错误,因为这不是在 C++ 中连接字符串的方法。但是该消息很奇怪,因为您似乎正在使用operator <<而不是operator +.

无论如何,使用std::stringstream.

std::stringstream ss;
ss << "(" << i << "," << j << ")";
myArray[i][j] = ss.str();
于 2012-09-15T05:34:50.113 回答
3

您可以编写一个stringbuilder实用程序,以便能够将其用作:

myArray[i][j] = stringbuilder() << "(" << i << "," << j << ")";

//other examples
std::string s = stringbuilder() << 25  << " is greater than " << 5;

f(stringbuilder() << a << b << c); //f is : void f(std::string const&);

其中stringbuilder定义为:

struct stringbuilder
{
   std::stringstream ss;
   template<typename T>
   stringbuilder & operator << (const T &data)
   {
        ss << data;
        return *this;
   }
   operator std::string() { return ss.str(); }
};

请注意,如果您要std::stringstream在代码中多次使用,则会stringbuilder减少代码的冗长性。否则,您可以std::stringstream直接使用。

于 2012-09-15T05:37:20.873 回答