使用stringstream将int解析为string

时间:2010-04-21 18:47:54

标签: c++ string int

嘛!

我对这个问题感到非常愚蠢,我完全不介意我是否因为这个而被投票,但我想如果我至少没有认真尝试寻找解决方案,我就不会发布这个问题。

我目前正在研究欧拉问题4,找到两个三位数[100..999]的最大回文数。

正如你可能猜到的那样,我正处于我必须使用我所做的整数的部分。我查了几个站点,看到了一些将Int转换为String的标准,其中一个包括stringstream。

所以我的代码看起来像这样:

//  tempTotal is my int value I want converted.
void toString( int tempTotal, string &str )
{ 
    ostringstream ss;            // C++ Standard compliant method.
    ss << tempTotal;
    str = ss.str();              // Overwrite referenced value of given string.
}

并且调用它的函数是:

else
{
    toString( tempTotal, store );
    cout << loop1 << " x " << loop2 << "= " << store << endl; 
}

到目前为止,这么好。我不能真正看到我写的错误,但输出给了我一些地址。它保持不变,所以我真的不知道程序在那里做了什么。

其次,我尝试了.ToString(),string.valueOf(tempTotal),(string)tempTotal,或者只是store = temptotal。

所有人都拒绝工作。当我只是尝试使用store = tempTotal进行隐式转换时,它根本没有给我一个值。当我尝试检查输出时,它几乎没有打印。我不知道是否有任何东西被复制到我的字符串中,而这些字符串不是可打印字符,或者编译器是否忽略了它。我真的不知道。

所以即使我觉得这是一个非常非常蹩脚的问题,我只需要问:

如何使用stringstream将该愚蠢整数转换为字符串?其他尝试或多或少与我无关,我只是想知道为什么我的stringstream解决方案无效。

编辑:

哇。认真。这有点令人尴尬。我忘了将tempTotal变量设置为某个东西。它是未初始化的,因此我无法复制任何内容以及程序给我0或根本没有任何内容的原因。

希望人们可以笑一笑,所以我认为这个问题现在更适合删除,因为它除了xD之外并不真正有用,但感谢所有试图帮助我的人!

5 个答案:

答案 0 :(得分:4)

您是否尝试按原样输出整数?如果你只是将它转换成一个字符串来输出它,那么不要打扰,因为cout会为你做这件事。

else
{
    // toString( tempTotal, store ); // Skip this step.
    cout << loop1 << " x " << loop2 << "= " << tempTotal << endl; 
}

我觉得tempTotal很可能没有您认为的价值。

答案 1 :(得分:2)

我知道这不会直接回答你的问题,但你不需要编写自己的转换函数,你可以使用boost

#include <boost/lexical_cast.hpp>
using boost::lexical_cast;

//usage example
std::string s = lexical_cast<std::string>(tempTotal);

答案 2 :(得分:1)

尝试以下方法:

string toString(int tempTotal)
{ 
    ostringstream ss;
    ss << tempTotal;
    return ss.str();
}

string store = toString(tempTotal);

答案 3 :(得分:1)

如果你想输出整数,你甚至不需要转换它;只需将其插入标准输出:

int i = 100;
cout << i;

如果你想要字符串表示,那你就做得很好。像你一样将它插入到字符串流中,并要求它为str()

如果这不起作用,我建议您尽量减少代码量,并尝试使用调试器查明实际问题:)

答案 4 :(得分:1)

简短回答:将int转换为字符串的方法有效。还有其他问题吗?