您好,我想定义一些自定义语句。例如,在波兰语中,我们有字母"a"而不是"ą"和"b",我想做这样的事情
#define a > b && ą > b
我需要这个来比较 if 语句来对单词进行排序,所以这应该像
if(ą > a) //false from define
不,你不能那样做。您必须使用(内联)函数或宏等函数来执行此操作。如果是用于排序,您应该记住,这将基于字符的整数表示进行排序,这不一定是按字母顺序排列的。
你对一种编程语言有一种直觉,你可以定义一些事实,并在以后以直接的方式使用它们。这是一种比直接用 C 语言编写的更抽象的表达方式。您正在寻找的编程语言很可能是Mathematica。您可以使用其符号规则替换来建立将抽象集合元素ą
排序在a
之后的规则,然后使用这些规则来获取有关各种元素的相对顺序的语句,即使在更复杂的表达式中也是如此(您可以定义字符连接等 - 所有这些都是抽象的,以及数学家会如何思考它, 而不是 C 让你直接表达的内容)。或者你可以使用Mathematica庞大的事实库,例如Alphabet["Polish"]
将波兰小写字母作为列表返回:{"a", "ą", "b", "c", "ć", …, "ż" }
- 这可用于建立排序顺序。
如果你想在 C 中执行此操作,那么:
-
这些字符在波兰语区域设置中已具有正确的排序规则顺序。如果您的系统设置为波兰语区域设置,则这种情况已经发生。
-
要比较字符,不能使用普通的 C 比较运算符,因为这些运算符比较字符的数值,而这些数值与排序顺序没有太大关系。使用 C 的
strcoll
函数来比较字符串(如果您愿意,可以是单字符字符串!
当然,您可以自己编写一个半生不熟的strcoll
,一个简单的方法可能是:
#include <assert.h>
#include <wchar.h>
int wcharpos_pl(wchar_t ch) {
static const wchar_t alphabet[] =
L"