Что является наиболее подходящим способом объединения с CString MFC?
Я немного новичок в C++, и мой опыт в Java. Я работаю над методом печати HDC. Я хотел бы знать, как лучше объединить комбинацию строк и целых в одну строку CString. Я использую MFC CString.
int i = //the current page
int maxPage = //the calculated number of pages to print
CString pages = ("Page ") + _T(i) + (" of ") + _T(maxPage);
Я хотел бы, чтобы это выглядело как "Страница 1 из 2". Мой текущий код не работает. Я получаю ошибку:
Выражение должно иметь целочисленный или перечислимый тип
Я нашел более сложные способы сделать то, что мне нужно, но я хочу знать, есть ли простой способ, похожий на то, что я пытаюсь. Спасибо!
4 ответа
Если это класс CString MFC, то вы, вероятно, хотите Format
который является sprintf-подобным для этого:
CString pages;
pages.Format(_T("Page %d of %d"), i, maxPage);
т.е. вы можете собрать строку, используя обычные спецификаторы формата printf, подставляя числа во время выполнения.
std::string
есть все что нужно:
auto str = "Page " + std::to_string(i) + " of " + std::to_string(maxPage);
Как правильно указано в комментарии, вы можете получить доступ к базовой C-строке через str.c_str()
, Вот живой рабочий пример.
Вы также можете использовать классы stringstream
#include <sstream>
#include <string>
int main ()
{
std::ostringstream textFormatted;
textFormatted << "Page " << i << " of " << maxPage;
// To convert it to a string
std::string s = textFormatted.str();
return 0;
}
Если у вас есть C++11, вы можете использовать std::to_string
: std::string pages = std::string("Page ") + std::to_string(i) + (" of ") + std::to_string(maxPage);
Если у вас нет C++11, вы можете использовать ostringstream
или же boost::lexical_cast
,