User:ColorfulGalaxy/Programs:修订间差异
ColorfulGalaxy(留言 | 贡献) 无编辑摘要 |
ColorfulGalaxy(留言 | 贡献) 无编辑摘要 |
||
第1行: | 第1行: | ||
This adaptable C++ code converts [[聊天字母|ASCII-based alphabet]] to ampersand-encoded [[PUA]]. | This adaptable C++ code converts [[聊天字母|ASCII-based alphabet]] to ampersand-encoded [[PUA]]. [http://tio.run/##7VdLb@M2EL7rVzAuGsiIA4uinkgcYLGHYoE9FFj0FPigULQjrEx5JTluu8hvT4ccyqYcOfXuJu2hjYHQ8/yGw5khzdfrS15mcvn09FMhebnJBbnmTZsX1Y3T49SFXAIrF4tCCiLKYgH/GkGKhcPvs5rwmXdFptNCrjctcoovt8l8xyNfNmIjnEK2ICgtZRSQUshle@/wSjagAVqleLj1w2g@@@p4@m8yuJA3Ek6nNPqXgJmvgQPkBRQXv2ceBAPmQYzCEMkQLUO0DJkRomUY4hLhEivgIHEuwjgM2MT7XXgpxyXGJQNzWKNIk5HhGsoI03SiHHhMO40RODbAMQLHCBwjcKyBo2CXauUF8aM77Sz00De7Q6GPQkQKIiMUSMZ6YQlSgYkqRDLVlmyBlK@AE0/vmKFdYBQ9XBJjjt4YmqcYFQNgvVUMJw3QhJ5wxho4NcVltrrQi0@R4ibVSKaGm@PCjDBEIXIZUqHZcYSJZOi9ixyrmkJ1KSYGzvAAmXHTIZskC1wSFBrnDI@eGW720pZj5/FqOn336f2HD6StyK@/vSPuR/EgyrHV6cs6@293uql7/5kG1FSk0v3qwNDpp5irmk71ErHIjipM0u8DtjrdgkheYVM6yKDnFts5ja1OT5CXYMMn0cu@tc@0nw72jTtOd8WlzYOTzDWwf1wYJkk/KqpNgl5VQ6drPyYNODETnFRwN5ABSIaqPh4yTHfNTQa6@Jc6exB2F3Mh/@/itwWGGeHxgy5WvAxFeE@YG8kz94QXIIkXhIfj3ouNEGe4l/5oF/9TqYYuftlc7eYOytVxHqoiJ@tNc@/i@5SOvzrwWnXh9XnTFH@KSn0dKyZp7@tq645UCs1rtHoQ9aKstqPxlUMeHfWWBbv5jNMrRZQXM/jyaEB4KbK6Q5l5yuVKrBrRAsDEm1hg2vjW2/uZnZ1xy9MaXtlt3xNGPEOCqGj049tFP7NL5pHzc@WVKor61JC@IpNUW6F6AJw00gzFUbcucNl8fk191LMz4ZNmnXFBMqmyKHm7ydqikoRnksiqJXcCvq6LNithe7nOE1GZIriJhTv6mcMnvxpN4KUAM2iPd0kjrf7YhQbbC3ZxqXf/C3Gx145rj2fF1U8y9SMrj/5gHumReIO/j3eVwW@sVZHnpYq9EacnE0AvBpLpHybzWHDhmwS3B704llEWHyTUMI65VJcLukR/@Nuzb9GMJtBjz@Do/rj2p@WphGBLWemIyEYWuZBtsSgE9DX0YcZbUY92oAce/MOorRiGQhw8RK/blBU1HCLtQjbpHA45PiVk28OPhbz3ZCwc22of1gLC@iyrrSSirqu6G6NmUtKxHnnq1bDKCumOlXVb/6F8bO@LUrj8bEa983O1MIyXz5aiVdtzsQBhWxySZBJiJieKoJTbxh11lYo5UMrGFbH51nAl5ro4tIMZ20MBBbiK3uOUIU2xlIf@KISO0/i4Y@xUVEzS43qMXnPQgpOLdEK60UNOvwSQArguAT2c58Nup09f1i9vYKN4NV5abWYnyjaAneyULbvrbrwO2nUFeRhD/4h2yMMnuEfoAfT89yzNQN1X1SPPoPpcfO7qC3olmiZbitu59rzQNWd4k6bNoe51mXzaZmtoDEHabUWyerlZQbM2cHh6wG6r@nMhl7o5atFuakk86I2np78A Try it online!] | ||
<pre class="mw-collapsible">#define PROGRAM | <pre class="mw-collapsible">#define PROGRAM | ||
#include <cstdio> | #include <cstdio> |
2024年12月11日 (三) 17:42的版本
This adaptable C++ code converts ASCII-based alphabet to ampersand-encoded PUA. Try it online!
#define PROGRAM #include <cstdio> #include <cstring> #define elif else if // Input ends in newline char c=0; //input char iq[8]; //input queue int iql=0; //input queue length const int lev[256]={ 000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, //16 000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, //32 000040,000041,000042,000000, 000044,000000,000000,000047, 000050,000051,000052,000053, 000054,000055,000056,000057, //48 +57543,0xe09c,0xe097,0xe09a, 0xe066,0xe067,0xe096,0xe06a, 0xe099,+57503,000072,000073, 000074,000075,000076,000077, //64 000000,0xe093,0xe06b,+57550, 0xe03b,0xe092,0xe069,+57546, 0xe03e,+57547,+57538,+57544, 0xe095,+57549,0xe03f,+57542, //80 +57537,+57545,+57540,+57548, 0xe098,+57539,0xe09b,+57536, +57502,0xe094,+57541,000000, 000000,000000,000000,000002, //96 000003,0xe06f,0xe021,0xe06c, 0xe061,0xe091,0xe06d,0xe063, 0xe065,0xe09d,0xe035,0xe054, 0xe060,0xe033,0xe039,0xe090, //112 0xe032,0xe036,0xe03d,0xe03c, 0xe062,0xe06e,0xe068,0xe034, 0xe037,0xe038,0xe03a,000000, 000000,000000,000007 };//ASCII to PUA (Level) const int gra[256]={ 000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, //16 000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, //32 000000,0xe020,000000,000000, +57637,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, //48 000000,000000,000000,000000, 000000,+57590,+57636,000000, +57589,000000,000000,000000, 000000,000000,000000,000000, //64 000000,000000,+57598,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, +57634,000000,+57595,+57597, //80 +57585,+57587,+57586,000000, 000000,000000,000000,+57639, 000000,+57593,000000,000000, 000000,000000,000000,000000, //96 000000,+57594,000000,000000, 000000,000000,000000,+57632, 000000,000000,000000,+57588, 000000,+57591,+57640,000000, //112 +57635,+57599,+57584,+57551, 000000,000000,+57633,+57592, +57596,+57638 };//ASCII to PUA (Grave) const int cen[256]={ 000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, //16 000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, //32 000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,0xe00c,000000, //48 0xe00a,0xe001,0xe002,0xe003, 0xe004,0xe005,0xe006,0xe007, 0xe008,0xe009,000000,000000, 000000,000000,000000,000000, //64 000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, 000000,000000,000000,000000, //80 000000,000000,000000,000000, 0xe00b }; void push(char c1){ if(iql>sizeof(iq)){ throw("e001 queue overflow"); } iq[iql]=c1; iql+=1; } void clear(char c1=0){ memset(iq,0,sizeof(iq)); iq[0]=c1; iql=!!c1; } void print(char c1=0){ if(iql==0){ ; } elif(iq[0]==-30 && iq[1]==-121 && iq[2]==-89){ if(iq[4]==96){ if(gra[iq[3]]<129){ throw("e002 space and punctuation can not be capitalized"); } printf("%c%c%d;",38,35,gra[iq[3]]-16); } if(iql==4){ if(lev[iq[3]]<129){ throw("e003 space and punctuation can not be capitalized"); } printf("%c%c%d;",38,35,lev[iq[3]]-16); } } elif(iq[0]==126){ if(iq[2]==96){ if(gra[iq[1]]<129){ throw("e004 space and punctuation can not be made middle case"); } printf("%c%c%d;",38,35,gra[iq[1]]+16); } if(iql==2){ if(lev[iq[1]]<129){ throw("e005 space and punctuation can not be made middle case"); } printf("%c%c%d;",38,35,lev[iq[1]]+16); } } elif(iq[0]==37){ if(iq[2]==37){ printf("%c%c%d;",38,35,cen[iq[1]]); } else { printf("%s",iq); } } elif(iq[1]==96){ if(gra[iq[0]]<10){ throw("e006 unidentified character"); } elif(gra[iq[0]]<127){ printf("%s",iq); } else { printf("%c%c%d;",38,35,gra[iq[0]]); } } elif(iql==1){ if(lev[iq[0]]<10){ throw("e007 unidentified character"); } elif(lev[iq[0]]<127){ printf("%s",iq); } else { printf("%c%c%d;",38,35,lev[iq[0]]); } } else { throw("e00f unknown error"); } clear(c1); } int main() { try{ while(c!=10&&c!=13){ c=getchar(); if(c==10){ print(); puts(""); } elif(c==13){ ; } elif(iql==0){ push(c); } elif(c==-30){ print(c); //Capital sign } elif(iql==1&&c==-121){ push(c); } elif(iql==2&&c==-89){ push(c); } elif(31<c&&c<126&&c!=96){ if(iq[0]==-30 && iq[1]==-121 && iq[2]==-89 && iql==3){ push(c); } elif(iq[0]==126 && iql==1){ push(c); } elif(iql>1&&iq[iql-1]==96){ print(c); } elif(31<iq[iql-1]&&iq[iql-1]<126){ print(c); } else { push(c); } } elif(c==96){ push(c); } elif(c==126){ print(c); } else { push(c); } } print(); }catch(const char message[]){ fputs(message,stderr); //Swap the two arguments if not working } return 0; }