我的想法是用C语言编写一个类似“猜词游戏”的程序。我希望它能够使用带有变音符号的德语单词(例如:
我的编译器和终端都能很好地处理Unicode。字符串的显示效果也很好。
但是,我应该如何对这些字符串进行操作呢?对于德语,我或许可以通过在函数中处理这些情况来处理6个大小写带重音字符。但是考虑到希腊语,这似乎是不可能的。
我编写了这段测试代码。它输出字符串、字符串长度(当然是错误的,因为UTF-8序列占据了两个字符的位置),以及字符串中各个字符的纯文本和十六进制值。
例如,有什么推荐的方法来计算Unicode字符的数量,或者查看特定的Unicode字符(即代码点)是否在字符串中?我相信一定有一些简单的解决方案,因为这样的字符经常用于密码等场景。
以下是测试程序的输出:
ä
,ü
,ö
),还可以使用希腊语单词(完全是非ASCII字符)。我的编译器和终端都能很好地处理Unicode。字符串的显示效果也很好。
但是,我应该如何对这些字符串进行操作呢?对于德语,我或许可以通过在函数中处理这些情况来处理6个大小写带重音字符。但是考虑到希腊语,这似乎是不可能的。
我编写了这段测试代码。它输出字符串、字符串长度(当然是错误的,因为UTF-8序列占据了两个字符的位置),以及字符串中各个字符的纯文本和十六进制值。
#include <stdio.h>
#include <string.h>
int main() {
printf("123456789\n");
char aTestString[] = "cheese";
printf("%s ist %d Zeichen lang\n", aTestString, strlen(aTestString));
for (int i = 0; i < strlen(aTestString); i++) {
printf("( %c )", aTestString[i]); // char als char
printf("[ %02X ]", aTestString[i]); // char in hexadezimal
}
printf("\n123456789\n");
char aTestString2[] = "Käse";
printf("%s has %d characters\n", aTestString2, strlen(aTestString2));
for (int i = 0; i < strlen(aTestString2); i++) {
printf("( %c )", aTestString2[i]); // char als char
printf("[ %02X ]", aTestString2[i]); // char in hexadezimal
}
printf("\n123456789\n");
char aTestString3[] = "λόγος";
printf("%s has %d characters\n", aTestString3, strlen(aTestString3));
for (int i = 0; i < strlen(aTestString3); i++) {
printf("( %c )", aTestString3[i]); // char als char
printf("[ %02X ]", aTestString3[i]); // char in hexadezimal
}
}
例如,有什么推荐的方法来计算Unicode字符的数量,或者查看特定的Unicode字符(即代码点)是否在字符串中?我相信一定有一些简单的解决方案,因为这样的字符经常用于密码等场景。
以下是测试程序的输出:
123456789
cheese has 6 character
( c )[ 63 ]( h )[ 68 ]( e )[ 65 ]( e )[ 65 ]( s )[ 73 ]( e )[ 65 ]
123456789
Käse has 5 characters
( K )[ 4B ]( )[ FFFFFFC3 ]( )[ FFFFFFA4 ]( s )[ 73 ]( e )[ 65 ]
123456789
λόγος has 10 characters
( )[ FFFFFFCE ]( )[ FFFFFFBB ]( )[ FFFFFFCF ]( )[ FFFFFF8C ]( )[ FFFFFFCE ]( )[ FFFFFFB3 ]( )[ FFFFFFCE ]( )[ FFFFFFBF ]( )[ FFFFFFCF ]( )[ FFFFFF82 ]
wchar_t
和处理宽字符串的函数,只需计算wchar_t
即可。在处理特殊字符和罕见的特殊符号之前,你不需要更复杂的东西。对于德文和希腊文来说,这已经足够了。 - n. m. will see y'all on Redditwchar_t
和处理宽字符串的函数,只需计算wchar_t
即可。除非你开始处理特殊字符和罕见字符,否则不需要更复杂的东西。对于德语和希腊语来说,这已经足够了。 - n. m. could be an AI