【问题标题】:How to concatenate strings in c++?如何在 C++ 中连接字符串?
【发布时间】:2012-09-24 15:19:44
【问题描述】:
string degreesToDMS(double angle) {
    int intpart = 0;
    int intpart2 = 0;
    int intpart3 = 0;
    return floor(angle) << "\xb0" << modf(angle, &intpart)*60 << "'" << modf(modf(angle, &intpart2), &intpart3)*60 << "\"";
}

这个函数以度为单位输入一个角度并输出一个纬度。

我在 return 语句上遇到错误。如何正确地将不同的数据类型连接到 C++ 中的字符串?

【问题讨论】:

标签: c++ string-concatenation


【解决方案1】:

要在 C++ 中连接字符串,您只需在两个字符串上使用 + operator

如果要将int 转换为string,请使用stringstream

#include <string>
#include <sstream>
using namespace std;

int main()
{
    string firstString = "1st, ";
    string secondString = "2nd ";

    string lastString  = firstString + secondString;

    int myNumber = 3;

    std::stringstream converANumber;
    converANumber << myNumber;

    lastString = lastString + converANumber.str();

}

【讨论】:

    【解决方案2】:

    您需要先在std::ostringstream 中构建结果,然后从中检索字符串。

    std::ostringstream ss;
    ss << floor(angle) << "\xb0" << modf(angle, &intpart)*60 ...
    return ss.str();
    

    还有其他方法可以达到这个结果;例如,在 C++11 中,您可以使用 std::to_string 将值转换为 std::string,然后将它们连接在一起。

    return std::to_string(floor(angle)) + "\xb0" + 
             std::to_string(modf(angle, &intpart)*60) + ...
    

    【讨论】:

      【解决方案3】:
      std::string result;
      result += std::to_string(floor(angle);
      result += "\xb0";
      result += std::to_string(modf(angle, &intpart) * 60);
      return result;
      

      请注意,这需要 C++11 才能获取 std::to_string

      【讨论】:

        【解决方案4】:

        如果您想使用流式操作符,请使用 std::stringstream,如下所示:-

        string degreesToDMS(double angle)
        {
          int intpart = 0;
          int intpart2 = 0;
          int intpart3 = 0;
          stringstream ss;
          ss << floor(angle) << "\xb0" << modf(angle, &intpart)*60 << "'" << modf(modf(angle, &intpart2), &intpart3)*60 << "\"";
          return ss.str ();
        }
        

        【讨论】:

        • ss在栈上分配是不是有问题?
        • @0x90 还应该分配到哪里(以及为什么)?
        • @0x90 ss 在堆栈上分配,但对ss.str() 的调用返回一个std::string 对象按值 然后由函数返回。
        • @Prætorian 即使ss.str() 将返回对其内部字符串的引用,函数degreesToDMS 本身仍被声明为按值返回字符串。
        • @cRaZiRiCaN:这是一个链接器错误,每一行都会告诉你什么符号没有找到。您需要将这些符号的定义编译/链接到您的程序中。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-17
        • 2011-07-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多