Подтвердить что ты не робот

Преобразовать double в строку С++?

Возможный дубликат:
Как преобразовать double в строку в С++?

Я хочу объединить строку, а double и g++ - эту ошибку:

main.cpp: В функции 'int main():
main.cpp: 40: ошибка: недопустимые операнды типов "const char [2] и" double to binary "operator +

Вот строка кода, на которую она выдает ошибку:

storedCorrect[count] = "("+c1+","+c2+")";

storedCorrect [] - это строковый массив, а c1 и c2 - оба. Есть ли способ конвертировать c1 и c2 в строки, чтобы моя программа могла правильно скомпилироваться?

4b9b3361

Ответ 1

Вы не можете сделать это напрямую. Существует несколько способов сделать это:

  • Используйте std::stringstream:

    std::ostringstream s;
    s << "(" << c1 << ", " << c2 << ")";
    storedCorrect[count] = s.str()
    
  • Используйте boost::lexical_cast:

    storedCorrect[count] = "(" + boost::lexical_cast<std::string>(c1) + ", " + boost::lexical_cast<std::string>(c2) + ")";
    
  • Используйте std::snprintf:

    char buffer[256];  // make sure this is big enough!!!
    snprintf(buffer, sizeof(buffer), "(%g, %g)", c1, c2);
    storedCorrect[count] = buffer;
    

Существует несколько других способов, использующих различные функции преобразования двух строк в строку, но это основные способы, по которым вы это увидите.

Ответ 2

В С++ 11 используйте std::to_string, если вы можете принять формат по умолчанию (%f).

storedCorrect[count]= "(" + std::to_string(c1) + ", " + std::to_string(c2) + ")";

Ответ 3

Используйте std::stringstream. Его operator << перегружен для всех встроенных типов.

#include <sstream>    

std::stringstream s;
s << "(" << c1 << "," << c2 << ")";
storedCorrect[count] = s.str();

Это работает так, как вы ожидали, так же, как вы печатаете на экране с помощью std::cout. Вместо этого вы просто "печатаете" на строку. Внутренние элементы operator << позаботятся о достаточном пространстве и выполнении необходимых преобразований (например, double - string).

Кроме того, если у вас есть библиотека Boost, вы можете рассмотреть возможность поиска lexical_cast. Синтаксис очень похож на обычные С++-стили:

#include <string>
#include <boost/lexical_cast.hpp>
using namespace boost;

storedCorrect[count] = "(" + lexical_cast<std::string>(c1) +
                       "," + lexical_cast<std::string>(c2) + ")";

Под капотом boost::lexical_cast в основном делает то же самое, что мы сделали с std::stringstream. Ключевым преимуществом использования библиотеки Boost является то, что вы можете пойти другим способом (например, string до double) так же легко. Больше не нужно возиться с atof() или strtod() и сырыми строками в стиле C.

Ответ 5

Я считаю, что sprintf - это правильная функция для вас. Я в стандартной библиотеке, например printf. Следуйте приведенной ниже ссылке для получения дополнительной информации:

http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/