【问题标题】:sstream not working...(STILL)流不工作...(仍然)
【发布时间】:2009-10-19 21:01:34
【问题描述】:

我试图通过 stringstream 将双精度数作为字符串,但它不起作用。

std::string MatlabPlotter::getTimeVector( unsigned int xvector_size, double ts ){
    std::string tv;
    ostringstream ss;
    ss << "0:" << ts << ":" << xvector_size;
    std::cout << ss.str() << std::endl;
    return ss.str();
}

它在我的控制台上只输出“0:”...

我正在处理两个项目,都存在相同的问题。我发布了一个不同的,它遇到了同样的问题。它张贴在这里:
http://pastebin.com/m2dd76a63
我有三个类 PolyClass.h 和 .cpp,以及主要的。有问题的函数是 PrintPoly。有人可以帮我吗?非常感谢!

【问题讨论】:

  • 请您使用“代码”按钮重新格式化您的代码?这样会更容易阅读,并且更有可能获得帮助。
  • 您没有解释您的问题 - 您提到了一个文件,但您的代码示例不包含文件。
  • 请贴出将字符串写入文件的代码!
  • 伙计们,在提交您的编辑之前,请检查其他人是否已修复它。它已经进行了 7 次编辑。
  • 我建议你们都退出编辑并让 OP 修复它,否则您很可能最终会编辑掉问题。要有耐心。 :)

标签: c++ string double sstream


【解决方案1】:

您的打印正确,但是您的打印顺序逻辑不正确。 我修改了它以按照我认为你想要的方式工作,如果这有帮助,请告诉我。 http://pastebin.com/d3e6e8263

旧答案:

尽管ostringstream 位于std 命名空间中,但您的代码仍然有效。问题出在您的文件打印代码中。

我可以看看你对函数的调用吗?

我做了一个测试用例:

// #include necessary headers
int main(void)
{
  std::string s;
  s = MatlabPlotter::getTimeVector(1,1.0);
}

我得到的输出是0:1:1

【讨论】:

    【解决方案2】:

    以下代码100%正确:

    #include <iostream>
    #include <sstream>
    #include <string>
    
    // removed MatlabPlotter namespace, should have no effect
    std::string getTimeVector(unsigned int xvector_size, double ts)
    {
        // std::string tv; // not needed
        std::ostringstream ss;
        ss << "0:" << ts << ":" << xvector_size;
    
        std::cout << ss.str() << std::endl;
    
        return ss.str();
    }
    
    int main(void)
    {
        // all work
        // 1:
        getTimeVector(0, 3.1415);
    
        // 2: (note, prints twice, once in the function, once outside)
        std::cout << getTimeVector(0, 3.1415) << std::endl;
    
        // 3: (note, prints twice, once in the function, once outside)
        std::string r = getTimeVector(0, 3.1415);
        std::cout << r << std::endl;
    }
    

    找出我们的不同之处,这可能是您的错误来源。因为它停在你的双精度,我猜你试图打印的双精度是无穷大、NaN(不是数字)或其他一些错误状态。

    【讨论】:

      【解决方案3】:

      我无法真正帮助解决其中的“无输出”部分,因为您没有显示尝试输出此内容的代码。作为猜测,您是否可能没有以某种方式将 EOL 放在那里?有些系统在遇到换行符之前不会给出任何文本输出。您可以通过将&lt;&lt; std::endl 添加到您的线路或将'\n' 添加到您的字符串来做到这一点。

      由于你没有为它写下使用,你需要使用类型std::ostringstream。这类似于您必须使用“std:string”而不仅仅是“string”。

      另外,如果是我,我会去掉那个 temp 变量,只使用 return ss.str(); 它的代码更少(可能会出错),并且程序的工作量可能更少。

      【讨论】:

      • 正确 - 但不是问题的根本原因。
      • 我明白了。我跳过了那个连接,因为你实际上并没有发布任何输出的代码。问题已适当编辑。
      • 只是指出这不是根本原因,以防止提出问题的人进一步混淆......无意冒犯。
      【解决方案4】:

      好吧,我尝试了您链接到的代码并输出

       B 4
       A 5
       B 4
       C 3
      x^ + 5x^ + 3
      

      在崩溃之前对我来说,虽然崩溃发生在 PrintPoly 之后。通过查看代码,这就是我期望它打印的内容。你是说字母后面没有整数吗?

      【讨论】:

        【解决方案5】:

        感谢大家的意见!不确定确切的错误,但一定是 XCode 中的某些设置搞砸了。我制作了一个 CMakeLists.txt 文件并使用从终端编译它
        cmake -G XCode .. 并制作了一个 XCode 项目。我运行了它,现在它工作正常......现在有人会碰巧知道什么可能导致 XCode 这样做吗?我正在使用以下版本运行 3.2 版:
        64 位
        组件版本
        Xcode IDE:1610.0
        Xcode 核心:1608.0
        工具支持:1591.0

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-11-08
          • 1970-01-01
          • 2012-10-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多