2015-02-26 3 views
2

Я немного новичок в C++, и мой фон находится на Java. Я работаю над методом печати hdc. Я хотел бы знать, как лучше всего конкатенировать комбинацию строк и ints в одну CString. Я использую CString MFC.Что является наиболее подходящим способом для конкатенации с CString MFC

int i = //the current page 
int maxPage = //the calculated number of pages to print 


CString pages = ("Page ") + _T(i) + (" of ") + _T(maxPage); 

Я бы хотел, чтобы это было похоже на «Страница 1 из 2». Мой текущий код не работает. Я получаю сообщение об ошибке:

Expression must have integral or enum type

я нашел более сложные способы сделать то, что мне нужно, но я хочу знать, если есть простой способ похож на то, что я пытаюсь. Благодаря!

+0

Вопрос в том, почему вы хотите использовать MFC и его древние классы, а не обычные строки C++ (т. Е. 'Std :: string')? Разумеется, если вам не нужно поддерживать устаревшую кодовую базу MFC. –

+0

Меня попросил мой работодатель использовать MFC при создании моего приложения. Я использую следующее с принтером HDC. \t \t \t \t \t \t CString str = m_CListCtrl.GetItemText (startrow, 0); \t \t \t \t \t \t dcPrinter.TextOut (startx + 10, starty + 1, _T (str), strlen (str)); –

ответ

3

Если это MFC's CString class, то вы, вероятно, хотите Format который является Sprintf Двойник для него:

CString pages; 
pages.Format(_T("Page %d of %d"), i, maxPage); 

т.е. вы можете собрать строку с помощью регулярного printf-format specifiers, заменяя цифры во время выполнения.

+0

Это было выбрано как лучший ответ, потому что это было самое простое решение для использования CString MFC. Я отредактировал мой оригинальный вопрос. –

+0

Используйте это 'CString MESSAGE, MESSAGE1; \t MESSAGE1 = CString ("Elmer jacobs"); \t MESSAGE = CString ("K") + MESSAGE1; \t pOutPut = (CStatic *) GetDlgItem (DK); \t pOutPut-> SetWindowTextW (MESSAGE); ' –

+0

@Dinesh Итак, просто конкатенация CString? Я не думаю, что здесь лучше, где у нас больше деталей и целых чисел. Также SetWindowText (вы, вероятно, хотите без «W» в общем случае) не нужен для этого вопроса, вы имели в виду, чтобы отправить это где-то еще? – Rup

3

std::string имеет все, что вам нужно:

auto str = "Page " + std::to_string(i) + " of " + std::to_string(maxPage); 

Как указано правильно в комментариях, вы можете получить доступ к лежащей в основе C-строки через str.c_str(). Here - живой пример работы.

+0

Хорошо. Мне нравится идея просто использовать str.c_str(). Однако я получаю сообщение об ошибке: более одного экземпляра перегруженной функции «std :: to_string». –

+0

@KyleWilliamson Можете ли вы попробовать снова с редактированием? –

2

Если у вас есть 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.

3

Вы также можете использовать 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; 
} 
Смежные вопросы