Home > other >  How to concat string and float
How to concat string and float

Time:07-02

I have a simple variable:

float t = 30.2f;

How do I add it to a string?

char* g = "Temperature is "   h?

Any guaranteed way (I don't have Boost for instance, and unsure of what version of c I have) I can get this to work on a microcontroller?

CodePudding user response:

For simple cases, you can just use the std::string class and the std::to_string function, which have both been part of C for a long time.

#include <string>
#include <iostream>

int main()
{
  float t = 30.2;
  std::string r = "Temperature is "   std::to_string(t);
  std::cout << r;
}

However, std::to_string doesn't give you much control over the formatting, so if you need to specify a field width or a number of digits after the decimal point or something like that, it would be better to see lorro's answer.

If you have an incomplete implementation of the C standard library on your microcontroller so you can't use the functions above, or maybe you just want to avoid dynamic memory allocation, try this code (which is valid in C or C ):

float t = 30.2;
char buffer[80];
sprintf(buffer, "Temperature is %f.", t);

Note that buffer must be large enough to guarantee there will never be a buffer overflow, and failing to make it large enough could cause crashes and security issues.

CodePudding user response:

std::ostringstream oss;
oss << t;
std::string s = "Temperature is "   oss.str();

Then you can use either the string or the c_str() of it (as const char*).

If, for some reason, you don't have standard library, you can also use snprintf() et. al. (printf-variants), but then you need to do the buffer management yourself.

CodePudding user response:

For the sake of completeness, C 20 introduces std::format for fluent string formatting of this sort:

#include <format>
#include <iostream>
#include <string>

int main() {
    float t = 30.2f;
    std::string s = std::format("Temperature is {}!\n", t);
    std::cout << s;
}

Do note that compiler support for the format library is still underway. GCC does not yet support it, and Clang only has experimental support1 in 14.0 .

1 requires LLVM to be compiled with -DLIBCXX_ENABLE_INCOMPLETE_FEATURES=ON

  • Related