我正在编写一个C++ wxWidgets计算器应用程序,并且我需要将运算符的字符存储在一个数组中。我有像int ops[10] = {'+', '-', '*', '/', '^'};这样的东西。如果我还想在数组中存储字符,比如√、÷和×,这样它们也可以在wxTextCtrl和自定义按钮中显示,该怎么办?
发布于 2021-06-05 02:10:38
这实际上是一个毛骨悚然的问题,尽管它一开始看起来不像。您的最佳选择是使用Unicode控制序列,而不是使用源代码编辑器添加特殊字符。
wxString ops[]={L"+", L"-", L"*", L"\u00F7"};
您需要确保正确编译了√、÷和×等字符。
您的源文件(.cpp)需要以一种确保编译器生成正确字符的方式来存储它们。这比看起来更难,特别是当涉及到svn、git、windows和linux时。
大多数情况下,.cpp文件是ANSI或8位编码的,不支持开箱即用的Unicode常量。
您可以将源文件保存为UTF-8代码页,以便保留这些字符。但并非所有编译器都接受UTF-8
最好的方法是使用Unicode控制字符对它们进行编码。wxString div(L"\u00F7");是÷的字符串。或者在您的情况下,可能是wxChar div('\u00F7')。您必须在Unicode控制序列中查找其他特殊字符。这样,您的源文件将只包含ANSI字符,并将被所有编译器接受。在与不同的操作系统平台交换源文件时,还可以避免代码页问题。
然后,您必须确保使用UNICODE感知来编译wxWidgets (尽管我认为这是wx3.x的默认设置)。然后,如果您的操作系统支持它,这些特殊字符应该会显示出来。
阅读Unicode控件(维基百科)。在utf8everywhere.org中也可以找到良好的输入。文件.editorconfig也可以提供帮助。
发布于 2021-06-05 02:03:58
我更喜欢使用wchar_t而不是int。
wchar_t ops[10] = {L'+', L'-', L'*', L'/', L'^', L'√', L'÷', L'×'};它们可以简单地支持您所描述的字符,并且可以简单而正确地转换为wxString。
https://stackoverflow.com/questions/67841901
复制相似问题