Преобразовать дважды для строкового представления C++? [дубликат]

, Каково различие между, "включают" и "требуют" в Ruby?

Ответ:

включать и требует, чтобы методы сделали совсем другие вещи.

потребовать метод делает то, что включает, делает на большинстве других языков программирования: петлять. Это также отслеживает то, чего Вы потребовали в прошлом и не потребуете того же файла дважды. Для петляния без этой добавленной функциональности можно использовать метод загрузки.

включать метод берет все методы от другого модуля и включает их в текущий модуль. Это - вещь уровня языка в противоположность вещи уровня файла, поскольку с требуют. Включать метод является основным способом "расширить" классы с помощью других модулей (обычно называемый соединением-ins). Например, если Ваш класс определяет метод "каждый", можно включать смесительный Счетный модуль, и это может действовать как набор. Это может сбивать с толку, поскольку включать глагол используется очень по-другому на других языках.

Источник

Поэтому, если Вы просто хотите использовать модуль, вместо того, чтобы расширить его или сделать соединение - в, тогда Вы захотите использовать require.

Достаточно странно, Ruby require походит на C include, в то время как Ruby include является почти ничем как C include.

27
задан Community 23 May 2017 в 12:32
поделиться

4 ответа

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

#include <sstream>    

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

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

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

#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.

23
ответ дан 28 November 2019 в 04:01
поделиться
std::string stringify(double x)
 {
   std::ostringstream o;
   if (!(o << x))
     throw BadConversion("stringify(double)");
   return o.str();
 }

Часто задаваемые вопросы по C ++: http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.1

10
ответ дан 28 November 2019 в 04:01
поделиться

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

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

1
ответ дан 28 November 2019 в 04:01
поделиться

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

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

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

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

     char buffer [256]; // убедитесь, что он достаточно большой !!!
    snprintf (буфер, sizeof (буфер), «(% g,% g)», c1, c2);
    storedCorrect [количество] = буфер;
    

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

72
ответ дан 28 November 2019 в 04:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: