gpt4 book ai didi

c - 如何在C中创建unicode变量?

转载 作者:行者123 更新时间:2023-11-30 18:34:39 24 4
gpt4 key购买 nike

我想编写一个程序,如果用户输入 3s,程序可以在控制台中打印字符“🂣”,对于输入 kh 输出“🂾”,对于输入 10c 输出“🃚”等。我有一个列表unicodes 来自 This Wikipedia page

Unicode for Card symbols

#include <stdio.h>
#include <string.h>

typedef struct card {
int val;
char suite;
} card;

void Take(card myCard[]);
void Display(card Cards[], int num);

void main()
{
card myCards[13];
int remaining = 13;
printf("Enter you cards:");
Take(myCards);
printf("Your cards are:");
Display(myCards, remaining);
while(remaining > 0)
{
remaining--;
}
}

void Take(card myCard[])
{
int i;
for(i = 0; i < 13; i++)
scanf("%d%c", &myCard[i].val, &myCard[i].suite);
}

void Display(card cards[], int num)
{
char unicode[7];
int i = 0;
for(i = 0; i < num; i++)
{
strcpy(unicode, "\u1F0");
switch(cards[i].suite)
{
case 's':
strcat(unicode, "A");
break;
case 'h':
strcat(unicode, "B");
break;
case 'b':
strcat(unicode, "C");
break;
case 'c':
strcat(unicode, "D");
break;
}
switch(cards[i].val)
{
case 10:
strcpy(unicode, "A");
break;
case 11:
strcpy(unicode, "B");
break;
case 12:
strcpy(unicode, "D");
break;
case 13:
strcpy(unicode, "E");
break;
default:
break;
}
printf("%s\t", unicode);
}
}

unicode 中有一个模式\u1f0XY,其中 x 从 A 到 D 更改套件,Y 从 1 到 E 更改卡片的值。我的方法是创建一个名为 Unicode 的字符串,其初始值为“\u1f0”。然后,根据卡的套件类型,我将在字符串中附加正确的 x,然后根据值,我将在 Unicode 字符串中附加正确的 y。 也就是说,我的方法是创建一个变量字符串,其中包含要打印的字符串的正确 Unicode。但我收到此错误

error: incomplete universal character name \u1F0 strcpy(unicode, "\u1F0");

如何正确创建变量 Unicode 还是不可能按照我的想法去做?

最佳答案

您处于一个不太常见的用例中,其 unicode 字符位于 Basic Multilingual Plane 之外。即使用大于 U+FFFF 的 unicode 代码。这些字符可以用大写 U 前缀后跟 8 个十六进制字符的 C 字面形式表示,并转换为其 UTF8 表示形式。通常黑桃 A 是 "\U0001FA01""\xf0\x9f\x82\xa1"。您的所有卡都将具有 2 个相同的共同第一个字节,只有最后两个字节会有所不同。一旦您了解了 UTF-8 编码的工作原理,您就可以这样编写您的 Display 函数:

void Display(card cards[], int num)
{
char unicode[7] = "\U0001FA00";
int i = 0;
for(i = 0; i < num; i++)
{
switch(cards[i].suite)
{
case 's':
unicode[2] = 0x82;
unicode[3] = 0xA0;
break;
case 'h':
unicode[2] = 0x82;
unicode[3] = 0xB0;
break;
case 'b':
unicode[2] = 0x83;
unicode[3] = 0x80;
break;
case 'c':
unicode[2] = 0x83;
unicode[3] = 0x90;
break;
}
unicode[3] += cards[i].val;
if(cards[i].val >= 12)
{
unicode[3] += 1;
}
printf("%s\t", unicode);
}
}

我无法真正测试显示,因为我的终端只能显示 BMP 中的 unicode 字符。

关于c - 如何在C中创建unicode变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51342410/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com