与 MFC 的 CString 连接的最合适的方法是什么
What is the most appropriate way to concatenate with MFC's CString
我对 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);
我希望它看起来像 'Page 1 of 2'。我当前的代码不起作用。我收到错误:
Expression must have integral or enum type
我发现了更困难的方法来完成我需要的事情,但我想知道是否有一种类似于我正在尝试的简单方法。谢谢!
std::string
应有尽有:
auto str = "Page " + std::to_string(i) + " of " + std::to_string(maxPage);
如评论中所述,您可以通过 str.c_str()
访问底层 C 字符串。 Here 是一个实际工作的例子。
如果你有 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
。
你也可以使用 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;
}
如果那是 MFC's CString class, then you probably want Format
,它与 sprintf 相似:
CString pages;
pages.Format(_T("Page %d of %d"), i, maxPage);
即您可以 assemble 使用常规 printf-format specifiers 在运行时替换数字的字符串。
我对 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);
我希望它看起来像 'Page 1 of 2'。我当前的代码不起作用。我收到错误:
Expression must have integral or enum type
我发现了更困难的方法来完成我需要的事情,但我想知道是否有一种类似于我正在尝试的简单方法。谢谢!
std::string
应有尽有:
auto str = "Page " + std::to_string(i) + " of " + std::to_string(maxPage);
如评论中所述,您可以通过 str.c_str()
访问底层 C 字符串。 Here 是一个实际工作的例子。
如果你有 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
。
你也可以使用 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;
}
如果那是 MFC's CString class, then you probably want Format
,它与 sprintf 相似:
CString pages;
pages.Format(_T("Page %d of %d"), i, maxPage);
即您可以 assemble 使用常规 printf-format specifiers 在运行时替换数字的字符串。