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