将int转换为to_string方法的字符串C ++

时间:2016-10-03 02:20:40

标签: c++

我正在用C ++编写一个词法分析器,并且必须为我的子类包含一个to_string()方法。这种方法不会被词法分析器使用,但我们被告知必须将它们包含在内以便进行调试。我写的to_string方法一直在产生错误,我不知道为什么。这就是我所拥有的:

string *AddopToken::to_string()
{
   token_type_type tokenType = get_token_type();
   addop_attr_type addopAttr = get_attribute();
   return "[TOKEN TYPE: " + tokenType + ", ATTRIBUTE TYPE: " + addopAttr + "]";
}

这似乎应该有用,但出于某种原因它不会。

以下是AddopToken标题中addop_attr_type的typedef。

typedef enum addop_attr { ADDOP_ADD = 400,
                          ADDOP_SUB = 401,
                          ADDOP_OR = 402,
                          ADDOP_NO_ATTR = 499 } addop_attr_type;

所以即使addopAttr的类型是addop_attr_type,所有真正的是一个int常量。我认为C ++可以将int转换为字符串。有没有办法将这些变量转换为字符串,以便我的to_string()能正常工作?

2 个答案:

答案 0 :(得分:0)

C ++不允许+用于串联字符串文字或字符串文字与整数。 您需要的代码是

char buff[1204];
sprintf(buff, "[TOKEN_TYPE; %d , ATTRUBUTE_TYPE %d ]", tokenType, addopAttr);

return std::string(buff);

你不必使用旧的C函数sprintf,人们为实现类似的事情而发明了许多C ++函数,并且摆脱了临时缓冲区,但代价是更难以遵循什么是在下面继续。

答案 1 :(得分:0)

这应该适合你:

编辑:现在它返回指向字符串的指针,在完成使用后忘记删除指针。

 std::string* AddopToken::to_string() const{

           token_type_type tokenType = get_token_type();
           addop_attr_type addopAttr = get_attribute();

           std::string* result = std::string();
           *result = std::string("[TOKEN TYPE: ") + std::to_string(tokenType) + std::string(", ATTRIBUTE TYPE: ") + std::to_string(addopAttr) + std::string("]");

           return result;
        }

C ++见" [TOKEN TYPE:"作为char [14]而不是字符串。要将int转换为字符串,请使用std :: to_string()。