C语言读取汉字字模

合集下载

CC++中的输入与输出及如何读取一行文本

CC++中的输入与输出及如何读取一行文本

CC++中的输⼊与输出及如何读取⼀⾏⽂本在使⽤C/C++进⾏编程的过程中,经常会遇到输⼊输出的问题。

对于C语⾔中,1. 格式化输⼊输出。

在C语⾔中,最常⽤的格式化输⼊输出是scanf和printf函数。

和这两个函数对应的更安全的函数是fscanf和fprintf:指定⽂件指针对于字符串的处理还有sscanf和sprintf:指定字符串声明如下:int printf(const char *format, ...);int fprintf(FILE *stream, const char *format, ...);int sprintf(char *str, const char *format, ...);int snprintf(char *str, size_t size, const char *format, ...);int scanf(const char *format, ...);int fscanf(FILE *stream, const char *format, ...);int sscanf(const char *str, const char *format, ...);2. 字符输⼊输出出了这些格式化输⼊输出函数之外,还有很多针对字符输⼊输出的函数:包括getc,getchar,gets,fgetc,fgets,putc,putchar,puts,fputc,fputs。

⾸先单个字符输⼊/输出函数对应的声明如下:int fgetc(FILE *stream); int getc(FILE *stream);从⽂件中读⼊⼀个字符,返回值就是读⼊的字符,如果错误返回EOF。

这两个函数具有相同的效果,但是getc是宏,⽽fgetc是函数。

程序员常⽤这个宏,因为它⽐调⽤函数更快。

int fputc(int c,FILE*stream); int putc(int c,FILE*stream);输出字符到⽂件。

CC++获取汉字拼音

CC++获取汉字拼音

CC++获取汉字拼⾳在参考⽂章的基础上,去掉了代码中C++特有的语法和数据类型,⽤纯C语⾔实现了获取汉字拼⾳的功能,使得代码在纯C项⽬中也能使⽤.编码格式: gbk测试字符串: const char* szChinese = "中华⼈民共和国 People's Republic of China";测试结果: ZhongHuaRenMinGongHeGuo People's Republic of China代码:1 #include <string.h>2 #include <stdint.h>3 #include <stdio.h>4 #include <ctype.h>56#define MAXBUFLEN 102478enum PinyinMode{9 enmPinyinMode_AllUpper = 0, //全⼤写10 enmPinyinMode_AllLower, //全⼩写11 enmPinyinMode_FirstUpper, //⾸字母⼤写12 };1314const char* getPinyinByCode(uint32_t code);15void getPinyin(const char* szChinese,char pinyinBuf[],const uint32_t maxBufLen,uint32_t *bufLen,const uint32_t mode);1617 int32_t main()18 {19 uint32_t bufLen = 0;20char pinyinBuf[MAXBUFLEN] = {0};21const char* szChinese = "中华⼈民共和国 People's Republic of China";22 getPinyin(szChinese,pinyinBuf,MAXBUFLEN,&bufLen,enmPinyinMode_FirstUpper);23 printf("%s %d\n",pinyinBuf,bufLen);24return0;25 }2627void getPinyin(const char* szChinese,char pinyinBuf[],const uint32_t maxBufLen,uint32_t *bufLen,const uint32_t mode)28 {29 *bufLen = 0;30 uint8_t ucHigh, ucLow;31 uint32_t code,i,j;32const uint32_t chineseLen = strlen(szChinese);33for (i = 0; i<chineseLen;++i )34 {35 uint8_t c = szChinese[i];36// 排除askii 码37if (isascii(c))38 {39 pinyinBuf[(*bufLen)++] = c;40continue;41 }42 ucHigh = (uint8_t)szChinese[i];43 ucLow = (uint8_t)szChinese[++i];44if ( ucHigh <= 0xa0 || ucLow <= 0xa0 )45 {46continue;47 }48else49 {50 code = (ucHigh - 0xa0) * 100 + ucLow - 0xa0;51 }52const char* pBuf = getPinyinByCode(code);53for (j = 0; j < strlen(pBuf) && (*bufLen) < maxBufLen; ++j)54 {55char cc = pBuf[j];56switch(mode)57 {58case enmPinyinMode_AllUpper:break;59case enmPinyinMode_AllLower:cc = tolower(cc);break;60case enmPinyinMode_FirstUpper:if(j!=0)cc = tolower(cc);break;61 }62 pinyinBuf[(*bufLen)++] = cc;63 }64 }69 {70case6325:71case6436:72case7571:73case7925:74return"A";75break;76case6263:77case6440:78case7040:79case7208:80case7451:81case7733:82case7945:83case8616:84return"AI";85break;86case5847:87case5991:88case6278:89case6577:90case6654:91case7281:92case7907:93case8038:94case8786:95return"AN";96break;97return"ANG"; 98break;99case5974:100case6254:101case6427:102case6514:103case6658:104case6959:105case7033:106case7081:107case7365:108case8190:109case8292:110case8643:111case8701:112case8773:113return"AO"; 114break;115case6056:116case6135:117case6517:118case7857:119case8446:120case8649:121case8741:122return"BA";123break;124case6267:125case6334:126case7494:127return"BAI"; 128break;129case5870:130case5964:131case7851:132case8103:133case8113:134case8418:135return"BAN"; 136break;137case6182:138case6826:139return"BANG"; 140break;141case6165:142case7063:143case7650:144case8017:145case8157:146case8532:147case8621:148return"BAO";157case8039:158case8156:159case8645:160case8725:161return"BEI"; 162break;163case5946:164case5948:165case7458:166case7928:167return"BEN"; 168break;169case6452:170case7420:171return"BENG"; 172break;173case5616:174case5734:175case6074:176case6109:177case6221:178case6333:179case6357:180case6589:181case6656:182case6725:183case6868:184case6908:185case6986:186case6994:187case7030:188case7052:189case7221:190case7815:191case7873:192case7985:193case8152:194case8357:195case8375:196case8387:197case8416:198case8437:199case8547:200case8734:201return"BI";202break;203case5650:204case5945:205case6048:206case6677:207case6774:208case7134:209case7614:210case7652:211case7730:212case7760:213case8125:214case8159:215case8289:216case8354:217case8693:218return"BIAN"; 219break;220case7027:221case7084:222case7609:223case7613:224case7958:225case7980:226case8106:227case8149:228case8707:229case8752:230return"BIAO"; 231break;232case8531:241case7587:242case7957:243case8738:244case8762:245return"BIN"; 246break;247case5787:248case5891:249case6280:250return"BING"; 251break;252case5781:253case6403:254case6636:255case7362:256case7502:257case7771:258case7864:259case8030:260case8404:261case8543:262case8559:263return"BO"; 264break;265case6318:266case6945:267case7419:268case7446:269case7848:270case7863:271case8519:272return"BU";273break;274case6474:275case7769:276return"CA";277break;278return"CAI"; 279break;280case6978:281case7078:282case7218:283case8451:284case8785:285return"CAN"; 286break;287case5687:288return"CANG"; 289break;290case6448:291case6878:292case8309:293case8429:294return"CAO"; 295break;296case6692:297return"CE";298break;299case6515:300case6825:301return"CEN"; 302break;303case6465:304return"CENG"; 305break;306case6639:307case6766:308case7017:309case7230:310case7311:311case7322:312case7363:313case7942:314case7979:315case8135:316return"CHA";322return"CHAI"; 323break;324case5770:325case5838:326case6159:327case6667:328case6893:329case6904:330case6981:331case7031:332case7086:333case7472:334case7688:335case7966:336case8324:337case8580:338return"CHAN"; 339break;340case5686:341case5943:342case6041:343case6137:344case6660:345case6568:346case6749:347case7029:348case7047:349case7438:350case7509:351case8680:352return"CHANG"; 353break;354case6687:355case7443:356case8173:357return"CHAO"; 358break;359case5969:360case7726:361return"CHE";362break;363case5840:364case5863:365case6251:366case6433:367case6923:368case7201:369case7320:370case7755:371case8619:372return"CHEN"; 373break;374case5609:375case5984:376case7239:377case7263:378case7583:379case7810:380case7881:381case7905:382case8146:383case8241:384case8508:385return"CHENG"; 386break;387case5749:388case6015:389case6061:390case6319:391case6374:392case6420:393case6445:394case6633:395case7042:396case7523:397case7787:398case8023:399case8101:400case8161:406case8556:407case8746:408return"CHI";409break;410case6091:411case6671:412case6731:413case8409:414case8430:415return"CHONG"; 416break;417case5717:418case6492:419case6716:420case8112:421case8637:422return"CHOU"; 423break;424case5601:425case5927:426case6680:427case6732:428case7109:429case7238:430case7290:431case7343:432case8150:433case8260:434case8573:435case8777:436return"CHU";437break;438case6285:439case6408:440case7590:441case8563:442return"CHUAI"; 443break;444case6622:445case6955:446case7516:447case7843:448case8413:449return"CHUAN"; 450break;451case6675:452return"CHUANG"; 453break;454case5879:455case7302:456case7319:457return"CHUI";458break;459case6127:460case8040:461case8277:462return"CHUN";463break;464case7401:465case8554:466case8626:467return"CHUO"; 468break;469return"CI";470break;471case6075:472case6358:473case7684:474case8043:475case8457:476return"4337 伺"; 477break;478case6042:479case6840:480case7085:481case7193:482case7214:483case7240:484return"CONG";489return"COU"; 490break;491case6180:492case6562:493case6607:494case7367:495case8501:496case8530:497case8577:498return"CU";499break;500case5764:501case6305:502case7664:503case7973:504return"CUAN"; 505break;506case6718:507case6145:508case6393:509case7213:510case7333:511case7505:512case8631:513return"CUI"; 514break;515case6666:516case8169:517return"CUN"; 518break;519case5640:520case6547:521case7566:522case7917:523case7983:524case8078:525case8526:526case8567:527return"CUO"; 528break;529case6239:530case6353:531case6410:532case6682:533case7007:534case8155:535case8346:536case8716:537case8718:538return"DA";539break;540case6004:541case6316:542case6523:543case6942:544case7110:545case7173:546case8776:547return"DAI"; 548break;549case5757:550case6144:551case6402:552case7373:553case7470:554case7781:555case8067:556case8087:557case8185:558case8376:559return"DAN"; 560break;561case5852:562case5942:563case6148:564case6920:565case7724:566case7885:567case8141:568return"DANG";574return"DAO"; 575break;576case7929:577return"DE";578break;579case6466:580case6556:581case7413:582case7767:583case7975:584case8403:585return"DENG"; 586break;587case5621:588case5765:589case5814:590case5848:591case5901:592case5970:593case6122:594case6454:595case7023:596case7116:597case7260:598case7306:599case7475:600case7738:601case7758:602case7791:603case7965:604case8438:605case8730:606return"DI";607break;608case6439:609return"DIA"; 610break;611case5871:612case5967:613case6559:614case7172:615case7868:616case8116:617case8118:618case8401:619case8558:620return"DIAN"; 621break;622case7886:623case8585:624case8684:625return"DIAO"; 626break;627case5976:628case6006:629case6273:630case6409:631case7526:632case8012:633case8183:634case8562:635case8688:636return"DIE"; 637break;638case5674:639case6404:640case7164:641case7575:642case7754:643case7814:644case8059:645case8184:646case8490:647return"DING"; 648break;649case7891:650return"DIU"; 651break;652case5977:658case7556:659case7747:660case8020:661return"DONG"; 662break;663case6190:664case8128:665case8229:666case8391:667return"DOU"; 668break;669case6022:670case6429:671case6834:672case7292:673case7525:674case8328:675case8338:676case8739:677case8782:678return"DU";679break;680case7318:681case7649:682case8393:683return"DUAN"; 684break;685case7701:686case7713:687case7752:688return"DUI"; 689break;690case6771:691case7632:692case7727:693case7766:694case7779:695case7970:696case8527:697return"DUN"; 698break;699case6345:700case6365:701case6785:702case7122:703case7876:704case8154:705case8566:706return"DUO"; 707break;708case5612:709case5832:710case5844:711case5949:712case6035:713case6113:714case6164:715case6332:716case6721:717case6977:718case7025:719case7378:720case7581:721case7916:722case7941:723case8042:724case8206:725case8689:726return"E";727break;728case6176:729case6284:730return"EN";731break;732case5706:733case6939:734case7177:735case7879:736case8025:742return"FA";743break;744case6212:745case6232:746case6506:747case7283:748case7660:749case7818:750case8576:751return"FAN"; 752break;753case5890:754case7242:755case7853:756case8419:757case8648:758return"FANG"; 759break;760case6032:761case6584:762case6713:763case6839:764case6990:765case7119:766case7328:767case7572:768case7619:769case7673:770case7948:771case8082:772case8267:773case8385:774case8468:775case8613:776case8678:777return"FEI"; 778break;779case5739:780case6915:781case7291:782case8687:783case8787:784return"FEN"; 785break;786case5726:787case5926:788case6155:789case6384:790case6767:791case7731:792return"FENG"; 793break;794return"FO"; 795break;796case8330:797return"FOU"; 798break;799case5775:800case5776:801case5914:802case6029:803case6062:804case6119:805case6142:806case6252:807case6327:808case6505:809case6686:810case6870:811case6985:812case7058:813case7066:814case7106:815case7108:816case7285:817case7471:818case7680:819case7741:820case7774:826case8261:827case8280:828case8283:829case8479:830case8535:831case8538:832case8654:833case8691:834return"FU";835break;836case6246:837case7056:838case7057:839case7424:840case7837:841return" GA"; 842break;843case5604:844case5875:845case5982:846case7414:847case7464:848return"GAI"; 849break;850case5965:851case6053:852case6247:853case6306:854case6779:855case6838:856case6887:857case7104:858case7347:859case7426:860case7723:861case8065:862case8491:863return"GAN"; 864break;865case7716:866case7824:867case8364:868return"GANG"; 869break;870case5626:871case5830:872case5912:873case6227:874case7141:875case7332:876case7334:877case7429:878case7915:879return"GAO"; 880break;881case5610:882case5678:883case5933:884case5957:885case6010:886case6435:887case7092:888case7501:889case7585:890case7749:891case7951:892case8143:893case8220:894case8420:895case8732:896return"GE";897break;898return"GEI"; 899break;900case5608:901case6102:902case6371:903case8462:904return"GEN";910return"GENG"; 911break;912case7178:913case7537:914case8228:915case8601:916return"GONG"; 917break;918case5694:919case5824:920case6524:921case6960:922case7037:923case7135:924case7259:925case7477:926case7616:927case8349:928case8384:929case8724:930return"GOU"; 931break;932case5637:933case5812:934case6152:935case6536:936case6773:937case7284:938case7379:939case7484:940case7486:941case7591:942case7617:943case7813:944case7825:945case7860:946case7932:947case8019:948case8083:949case8233:950case8494:951case8593:952case8681:953case8729:954return"GU";955break;956case5652:957case5820:958case6341:959case7273:960case7550:961case8027:962return"GUA";963break;964return"GUAI"; 965break;966case5736:967case6124:968case6272:969case6842:970case7834:971case8057:972case8170:973case8704:974return"GUAN"; 975break;976case6359:977case6578:978case7270:979case7555:980return"GUANG"; 981break;982case5648:983case5659:984case6649:985case7003:986case7277:987case7433:988case7448:993return"GUI"; 994break;995case5782:996case7121:997case7762:998case8671:999return"GUN"; 1000break;1001case5769: 1002case6266: 1003case6335: 1004case6494: 1005case6538: 1006case6603: 1007case7304: 1008case7529: 1009case8188: 1010case8268: 1011case8269: 1012return"GUO"; 1013break;1014case7894: 1015return"HA"; 1016break;1017case6443: 1018case7560: 1019case8516: 1020return"HAI"; 1021break;1022case5885: 1023case6153: 1024case6294: 1025case6759: 1026case6911: 1027case7447: 1028case7642: 1029case8192: 1030case8205: 1031case8232: 1032case8793: 1033return"HAN"; 1034break;1035case6776: 1036case7112: 1037case8194: 1038return"HANG"; 1039break;1040case6179: 1041case6222: 1042case6438: 1043case6467: 1044case6909: 1045case6916: 1046case7427: 1047case8009: 1048case8211: 1049case8226: 1050return"HAO"; 1051break;1052case5813: 1053case5932: 1054case5954: 1055case6432: 1056case6756: 1057case7434: 1058case7833: 1059case8202: 1060case8234: 1061case8471: 1062return"HE"; 1063break;1064return"HEI"; 1065break;1066return"HEN"; 1067break;1068case6231: 1069case7181: 1070case7276: 1071return"HENG"; 1072break;1081return"HONG"; 1082break;1083case6009:1084case6565:1085case6943:1086case8090:1087case8383:1088case8455:1089case8655:1090case8731:1091return"HOU"; 1092break;1093case5792:1094case6392:1095case6481:1096case6518:1097case6609:1098case6679:1099case6717:1100case6816:1101case6879:1102case7190:1103case7346:1104case7385:1105case7618:1106case7635:1107case7646:1108case7670:1109case7672:1110case7679:1111case8013:1112case8032:1113case8041:1114case8055:1115case8343:1116case8513:1117case8590:1118return"HU"; 1119break;1120case7072:1121case7275:1122case7725:1123case7892:1124return"HUA"; 1125break;1126case8555:1127return"HUAI"; 1128break;1129case5928:1130case6140:1131case6307:1132case6487:1133case6621:1134case6801:1135case6829:1136case6881:1137case6930:1138case6953:1139case7157:1140case7944:1141case8673:1142case8763:1143return"HUAN"; 1144break;1145case5882:1146case6569:1147case6850:1148case6874:1149case6956:1150case7211:1151case7533:1152case8105:1153case8308:1154case8382:1155case8692:1156return"HUANG";1165case6736: 1166case6807: 1167case6811: 1168case6971: 1169case7132: 1170case7185: 1171case7445: 1172case7703: 1173case8219: 1174case8319: 1175case8766: 1176return"HUI"; 1177break;1178case5827: 1179case6638: 1180case6752: 1181case6867: 1182return"HUN"; 1183break;1184case5669: 1185case6229: 1186case6311: 1187case6475: 1188case6623: 1189case7856: 1190case7933: 1191case7976: 1192case8175: 1193case8322: 1194return"HUO"; 1195break;1196case5629: 1197case5632: 1198case5662: 1199case5705: 1200case5742: 1201case5952: 1202case6024: 1203case6033: 1204case6193: 1205case6210: 1206case6265: 1207case6320: 1208case6350: 1209case6383: 1210case6507: 1211case6553: 1212case6809: 1213case6976: 1214case7087: 1215case7160: 1216case7165: 1217case7314: 1218case7374: 1219case7410: 1220case7411: 1221case7469: 1222case7473: 1223case7487: 1224case7620: 1225case7722: 1226case7831: 1227case7990: 1228case8002: 1229case8104: 1230case8217: 1231case8337: 1232case8339: 1233case8463: 1234case8550: 1235case8611: 1236case8661: 1237case8674: 1238case8757: 1239case8768: 1240return"JI";1249case7409:1250case7546:1251case7702:1252case7882:1253case7956:1254case8072:1255case8142:1256case8244:1257case8353:1258case8434:1259case8542:1260return"JIA"; 1261break;1262case5752:1263case5841:1264case5857:1265case6149:1266case6183:1267case6286:1268case6853:1269case6931:1270case6932:1271case7144:1272case7237:1273case7305:1274case7407:1275case7415:1276case7480:1277case7489:1278case7506:1279case7576:1280case7790:1281case7921:1282case8047:1283case8148:1284case8340:1285case8469:1286case8534:1287case8561:1288case8668:1289case8721:1290return"JIAN"; 1291break;1292case6092:1293case6814:1294case7113:1295case7154:1296case7481:1297case7768:1298case8180:1299case8461:1300case8488:1301return"JIANG"; 1302break;1303case5714:1304case5753:1305case6020:1306case6090:1307case6256:1308case6461:1309case6572:1310case7015:1311case7524:1312case8008:1313case8052:1314case8252:1315case8520:1316case8551:1317case8662:1318return"JIAO"; 1319break;1320case5806:1321case5821:1322case6255:1323case6414:1324case7028:1333case8726:1334return"JIE"; 1335break;1336case5865:1337case6103:1338case6132:1339case6468:1340case6643:1341case6659:1342case7138:1343case7210:1344case7340:1345case7465:1346case7478:1347case8138:1348return"JIN"; 1349break;1350case5751:1351case5869:1352case6128:1353case6616:1354case6729:1355case6794:1356case6941:1357case6982:1358case7026:1359case7534:1360case7554:1361case7570:1362case7626:1363return"JIANG"; 1364break;1365case6936:1366case7671:1367return"JIONG"; 1368break;1369case5754:1370case6417:1371case6746:1372case7249:1373case7274:1374case8015:1375case8053:1376case8481:1377case8761:1378return"JIU"; 1379break;1380case5738:1381case5810:1382case6036:1383case6058:1384case6076:1385case6268:1386case6965:1387case6980:1388case7202:1389case7307:1390case7316:1391case7323:1392case7357:1393case7381:1394case7488:1395case7611:1396case7850:1397case7924:1398case8022:1399case8132:1400case8153:1401case8482:1402case8522:1403case8565:1404case8620:1405case8634:1406case8722:1407return"JU"; 1408break;1417return"JUAN"; 1418break;1419case5642: 1420case5667: 1421case5860: 1422case5939: 1423case6207: 1424case6421: 1425case6457: 1426case6469: 1427case6540: 1428case6617: 1429case7062: 1430case7169: 1431case7286: 1432case7351: 1433case7663: 1434case7967: 1435case8574: 1436case8591: 1437return"JUE"; 1438break;1439case6260: 1440case8168: 1441case8362: 1442case8769: 1443return"JUN"; 1444break;1445case5671: 1446case6339: 1447case7544: 1448return"KA"; 1449break;1450case5660: 1451case5978: 1452case6160: 1453case6673: 1454case6693: 1455case7888: 1456case7920: 1457case7939: 1458return"KAI"; 1459break;1460case5709: 1461case6108: 1462case7412: 1463case7772: 1464case7811: 1465return"KAN"; 1466break;1467case5688: 1468case6742: 1469case7854: 1470return"KANG"; 1471break;1472case6974: 1473case7264: 1474case7491: 1475case7877: 1476return"KAO"; 1477break;1478case6430: 1479case6519: 1480case6701: 1481case6859: 1482case7076: 1483case7128: 1484case7170: 1485case7380: 1486case7520: 1487case7807: 1488case7861: 1489case7930: 1490case7993: 1491case8066: 1492case8129:1499return"KEN"; 1500break;1501case7912:1502return"KENG"; 1503break;1504case5737:1505case6539:1506case8377:1507return"KONG"; 1508break;1509case6050:1510case6202:1511case6321:1512case7778:1513case8356:1514return"KOU"; 1515break;1516case5658:1517case6005:1518case6423:1519case7111:1520case8728:1521return"KU"; 1522break;1523case5708:1524return"KUA"; 1525break;1526case5665:1527case5906:1528case6364:1529case6586:1530case7558:1531return"KUAI"; 1532break;1533case8737:1534return"KUAN"; 1535break;1536case5818:1537case5831:1538case5887:1539case5959:1540case6237:1541case6349:1542case7094:1543case7460:1544return"KUANG"; 1545break;1546case5624:1547case5649:1548case5771:1549case6162:1550case6281:1551case6413:1552case6416:1553case6720:1554case6951:1555case7450:1556case7805:1557case8606:1558case8743:1559return"KUI"; 1560break;1561case6204:1562case6245:1563case6458:1564case6618:1565case6928:1566case7152:1567case7841:1568case8051:1569return"LIAO"; 1570break;1571case5793:1572case5988:1573case6270:1574case6354:1575case6803:1576case8483:1583case6555: 1584case6662: 1585case6733: 1586case6964: 1587case7361: 1588case7405: 1589case7602: 1590case7812: 1591case8452: 1592case8579: 1593case8775: 1594return"LIN"; 1595break;1596case5925: 1597case6063: 1598case6342: 1599case6482: 1600case6786: 1601case7117: 1602case7258: 1603case7289: 1604case7418: 1605case8186: 1606case8240: 1607case8465: 1608case8676: 1609return"LING"; 1610break;1611case6815: 1612case6962: 1613case7082: 1614case7124: 1615case7628: 1616case7654: 1617case7919: 1618case7954: 1619case8050: 1620case8644: 1621return"LIU"; 1622break;1623case5966: 1624case6055: 1625case6781: 1626case7171: 1627case7248: 1628case7542: 1629case7735: 1630case8110: 1631return"LONG"; 1632break;1633case5745: 1634case6168: 1635case6422: 1636case6548: 1637case7946: 1638case8092: 1639case8179: 1640case8287: 1641case8735: 1642return"LOU"; 1643break;1644case6744: 1645case7321: 1646case7586: 1647case7918: 1648case7989: 1649case8158: 1650return"Lü"; 1651break;1652case5968: 1653case6303: 1654case6464: 1655case6782: 1656case6843: 1657case6885: 1658case6954: 1659case7220: 1660case7251:1669case8392:1670case8421:1671case8652:1672return"LU"; 1673break;1674case5785:1675case7014:1676case7279:1677case8029:1678case8639:1679return"LUAN"; 1680break;1681return"LǖE"; 1682break;1683return"LUN"; 1684break;1685case5732:1686case5789:1687case6093:1688case6259:1689case6291:1690case6604:1691case6788:1692case6880:1693case7183:1694case7301:1695case7565:1696case7961:1697case8107:1698case8635:1699return"LUO"; 1700break;1701case6328:1702return"M"; 1703break;1704case6373:1705case6579:1706case7054:1707case7231:1708case8301:1709return"MA"; 1710break;1711case5929:1712case6104:1713case8618:1714return"MAI"; 1715break;1716case6012:1717case6503:1718case7147:1719case7655:1720case7960:1721case8209:1722case8293:1723case8709:1724case8720:1725return"MAN"; 1726break;1727case5888:1728case6861:1729case7743:1730case8294:1731return"MANG"; 1732break;1733case5783:1734case6066:1735case6525:1736case6787:1737case7203:1738case7436:1739case7483:1740case7503:1741case7624:1742case7714:1743case7806:1744case8317:。

利用VC实现汉字字模提取及串行通信

利用VC实现汉字字模提取及串行通信
i p e h l g ds hy tc o o 、 Ho t e i e e f n s e o st e f s n y w O g t Chn s o t b c me h rti o tn r b e whc a O b o v d i in s h r ce i ly t c - i mp r t o l m i h h t e s le Ch ee c a a tr ds a e h a p s n s p
关键词 : VC; 字模 ; 片机 ; 单 串行 通信
中圈分类号 :P 1 T 32
文献标识码 : A
文章编号 :0 9 3 4 (0 6 1 — 1 1 0 1 0 — 0 4 2 0 )7 0 2 - 3
W i d a n e Chn s ti n aiigt e COM r Co t r wigt ie e Ma r a d Re l n h h h x z Po t mmu ia in b C nc t y V o
1引 言
在 车 站 、 场 、 场 、 矿 企 业 及 其 他 一 些 公 共 场 所 . 常 需 机 商 厂 经
i aya dn m i h o ue t o g lrr dsnigte t tes gec pcmp t ru hteCOM otB imen,t n acs eeii c f edsl f hn s b n e h Oh n l i rh h p r yt s asieh e t fc n yo i a o i e . h n h e h t py C e
c rce d e s r s h ei i t ! a h a tra n u e e rl b l n t a i y
K y we d : e r s VC; i n s o t s ge c p c mp t r e a o Ch e ef n s i l h o u e ; r c mmu c t n ;n i si l i i n ao

C51批量字模提取工具v1.1

C51批量字模提取工具v1.1

C51批量字模提取工具帮助文档:1、文字的转换软件打开后在字符输入框里面输入想要转换的汉字就可以进行批量转换(1.1版本中由原来的20个汉字减少为19个)点击开始转换或者回车键即可看到效果,输出结果在下方。

默认转换为16*16点阵字体。

按复制结果(ALT+C)即可快速复制。

1文字的转换2文字方向2、文字的方向点击文字方向中的任意方向,软件即会转换出对应翻转文字的结果,如图2所示3、读取顺序选择根据不同单片机和不同的写程序习惯,这里提供读取顺序选择,当然,根据不同的顺序选择也可以制造出反字等效果。

大家可以自行学习研究。

4、字符反白制作LCD菜单时经常使用的功能哦,操作很简单。

在转换之前或转换完成以后,点击字符反白,则当前的图片变成反白状,或所有字重新转换成反白字。

效果如图3:图3 文字反白5、字体点阵大小选择每次文字转换之前都可以进行点阵选择,选择适当的字体大小。

12点阵比较节省空间以下为12点阵的介绍。

点击12中英之后,点击开始转换,则结果就出来了。

如图4所示图4 12点阵测试6、半角字符的使用在字符输入框中输入一个半角字符,或清空字符框之后点击16*8,即可切换至半角字符模式。

(12点阵的直接输入半角字符即可,软件会自动识别)此模式必须每个英文字母单独转换,切勿一起打进去。

后面有介绍英文字母数字的批量操作。

图5 半角字符7、自定义绘图在任何时候可以使用鼠标在绘图板中进行绘图,知道满意之后,点击开始转换(回车),即可得到结果,此时也可以进行反白操作哦!8、半角字符的批量处理操作因为软件不支持英文混排,此时便可以使用捕获到文件操作进行批处理。

点击捕获到文件,保存到随意的一个路径之后,我们之后进行的所有转换操作软件都会进行记录。

此时您可以按照这个顺序输入a回车b回车c回车d回车e回车f回车g回车等等,直到所有想要的半角字符转换完成,在次点击捕获到文件,以停止捕获,此时可以根据提示查看文件,也可以按快捷键(CTRL+O)查看内容。

C#读写文本文件(.txt)的方法实例

C#读写文本文件(.txt)的方法实例

C#读写⽂本⽂件(.txt)的⽅法实例读取txt⽂件如果你要读取的⽂件内容不是很多,可以使⽤ File.ReadAllText(filePath) 或指定编码⽅式 File.ReadAllText(FilePath, Encoding)的⽅法。

它们都⼀次性将⽂本内容全部读完,并返回⼀个包含全部⽂本内容的字符串string str1 = File.ReadAllText(@"c:\temp\a.txt");//也可以指定编码⽅式string str2 = File.ReadAllText(@"c:\temp\a.txt", Encoding.ASCII);也可以使⽤⽅法File.ReadAllLines,该⽅法⼀次性读取⽂本内容的所有⾏,返回⼀个字符串数组,数组元素是每⼀⾏的内容string[] strs1 = File.ReadAllLines(@"c:\temp\a.txt");// 也可以指定编码⽅式string[] strs2 = File.ReadAllLines(@"c:\temp\a.txt", Encoding.ASCII);当⽂本的内容⽐较⼤时,我们就不要将⽂本内容⼀次性读完,⽽应该采⽤流(Stream)的⽅式来读取内容。

.Net为我们封装了StreamReader类,它旨在以⼀种特定的编码从字节流中读取字符。

StreamReader类的⽅法不是静态⽅法,所以要使⽤该类读取⽂件⾸先要实例化该类,在实例化时,要提供读取⽂件的路径。

实例化StreamReader类有很多种⽅式。

下⾯我罗列出⼏种:StreamReader sR1 = new StreamReader(@"c:\temp\a.txt");// 同样也可以指定编码⽅式StreamReader sR2 = new StreamReader(@"c:\temp\a.txt", Encoding.UTF8);FileStream fS = new FileStream(@"C:\temp\a.txt", FileMode.Open, FileAccess.Read, FileShare.None);StreamReader sR3 = new StreamReader(fS);StreamReader sR4 = new StreamReader(fS, Encoding.UTF8);FileInfo myFile = new FileInfo(@"C:\temp\a.txt");// OpenText 创建⼀个UTF-8 编码的StreamReader对象StreamReader sR5 = myFile.OpenText();// OpenText 创建⼀个UTF-8 编码的StreamReader对象StreamReader sR6 = File.OpenText(@"C:\temp\a.txt");初始化完成之后,你可以每次读⼀⾏,也可以每次读⼀个字符,还可以每次读⼏个字符,甚⾄也可以⼀次将所有内容全部读完// 读⼀⾏string nextLine = sR.ReadLine();// 读⼀个字符int nextChar = sR.Read();// 读100个字符int n = 100;char[] charArray = new char[n];int nCharsRead = sR.Read(charArray, 0, n);// 全部读完string restOfStream = sR.ReadToEnd();使⽤完StreamReader之后,不要忘记关闭它: sR.Close();假如我们需要⼀⾏⼀⾏的读,将整个⽂本⽂件读完,下⾯看⼀个完整的例⼦:StreamReader sR = File.OpenText(@"C:\temp\a.txt");string nextLine;while ((nextLine = sR.ReadLine()) != null){Console.WriteLine(nextLine);}sR.Close();写⼊txt⽂件写⽂件和读⽂件⼀样,如果你要写⼊的内容不是很多,可以使⽤File.WriteAllText⽅法来⼀次将内容全部写如⽂件。

C判断中文字符的八种方法

C判断中文字符的八种方法

} } return false; } 方法二: public bool IsChina(string CString) { bool BoolValue = false; for (int i = 0; i &lt; CString.Length; i++) { if (Convert.ToInt32(Convert.ToChar(CString.Substring(i, 1))) &lt; Convert.ToInt32(Convert.ToChar(128))) { BoolValue = false; } else { return BoolValue = true; } } return BoolValue; } 方法三: /// &lt;summary&gt; /// 判断句子中是否含有中文 /// &lt;/summary&gt; /// &lt;param &gt;字符串&lt;/param&gt; public bool WordsIScn(string words) { string TmmP; for (int i = 0; i &lt; words.Length; i++) { TmmP = words.Substring(i, 1); byte[] sarr = System.Text.Encoding.GetEncoding(&quot;gb2312&quot;).GetByt
byte byte1 = bytes[0]; byte byte2 = bytes[1]; if (byte1 &gt;= 176 &amp;&amp; byte1 &lt;= 247 &amp;&amp; byte2 &gt;= 160 &amp;&amp; by

c语言——从文本文件读取正文并统计字符

c语言——从文本文件读取正文并统计字符

安阳师范学院
·程序设计课程实践·
while((ch = getc(fp)) != EOF) //循环获取直至文件结束 EOF 标志 printf(" 小 写 =%d\n 大 写 =%d\n 空 格 =%d\n 数 字 =%d\n 其 它 =%d\n",xiaoxie,daxie,kongge,shuzi,other);//打印统计值
char ch; int shuzi=0,kongge=0,xiaoxie=0,daxie=0,other=0; // 声 明 变 量 zimu,kongke,shuzi,other FILE* fp; char fname[50] = "111.txt"; fp = fopen(fname,"r"); //只供读取 if(fp == NULL) //如果失败了 {
安阳师范学院
·程序设计课程实践·
师求助等方法已解决问题;
五、 课外实践总结
经过几周的课程设计,巩固和加深了我们对数据结构的理解,提高了综合运 用课本所学知识的能力。培养了我们独立思考,深入研究,团队合作、分析问题、 解决问题的能力。按照要求编写程序设计报告,能正确阐述设计和实验结果,正 确绘制系统和程序框图。同时,通过这次课程设计我们发现,数据结构基础掌握 的还不够扎实,有很多地方还需要继续努力。
三、 主要算法流程描述及部分核心算法
流程图如下图所示。
核心算法为:
1、 文本文件的读取
#include <stdio.h>
int main()
{
char ch;
FILE* fp;
char fname[50] = "111.txt";

C读取文本文件

C读取文本文件

1.0中,已经基本把C语言的很多语言上的特性,以及常见的问题浏览了一遍了。

2.0开始就是一些具体的实际应用。

不过实话说,C语言要完成图形化程序是非常麻烦的,现在用C语言的地方很多就是嵌入式,或者服务器程序。

首先将如何操作文件。

这篇的大部分内容再以前的一篇特别篇讲过。

C 语言是为了写Unix诞生的,所以C语言的I/O系统遵循了Unix的I/O体系,或者说Unix 遵循了C的,这就是一个鸡和弹的问题。

Unix的I/O 将一切外部设备视为文件,有5个基本的I/O函数open, close, read, write和ioctl。

其中ioctl是一个控制设备用的函数,对于文件基本不需要这个函数,其他的对应与C语言中的文件函数就是fopen, fclose, fread, fwrite。

Unix将文件视为一个字节流,windows也采用了这种方式。

对一个文件进行I/O 时,首先需要fopen,这个函数返回一个文件指针,其他文件I/O函数都要使用这个指针,fopen函数有两个参数,第一个是文件名字,第二个是打开方式。

文件名字好理解,符合前面讲到的文件树的规则就可以了,容易引起困惑的是文本方式打开文件和二进制方式打开文件有什么区别?我个人认为由于文件本身是无差别的字节流,所以两种方式没有区别,但有一次在读取设备采集的原始数据时出了个错误。

在windows平台下,以文本方式打开文件时,读取到一个0x1D字节时,就认为文件结束了,feof函数返回真了,而实际上文件后面还有好大一块,而以二进制方式打开则一直读到实际的文件尾。

这个估计就是文本方式和二进制方式打开文件的区别。

举个例子,一个32位数字0x0000200十进制数512,可以以两种方式存在文件中。

第一种是人易读的方式"512",存储3个字符,每个字符按ASCII码存放,这样用一个文本编辑器打开,人可以容易的读到这个数是512。

第二种方式是以机器易读的方式直接存储4个字节一个32位的00 00 02 00,这样机器容易读取这个数是512,直接内存拷贝就可以。

C语言辅导-在C程序中显示汉字

C语言辅导-在C程序中显示汉字

C语言辅导:在C程序中显示汉字下面的方法可以帮你在西文环境下显示汉字。

这种方法是调用中文汉字库进展汉字显示。

国家标准规定:汉字库分94个区,每个区有94个汉字(以位作区分),每个汉字在汉字库中有确定的区和位编号,这就是汉字的区位码。

每个汉字在库中是以点阵字模形式存储的,一般采纳16×16点阵(32字节)、24×24点阵(72字节),每个点用一个二进制位(0或1)表示,对应在屏幕上显示出来,就是相应的汉字。

由于在中文环境下,输入的是汉字的内码,我们必需将之转换成区位码,算出偏移量,从字库中找到对应的汉字,将其字模显示即可。

内码转换成区位码方法如下:qh=c1-0xa0 wh=c2-0xa0其区位码就是:qw=qh*0xff+wh该汉字在字库中离起点的位置是:offset=(94*(qh-1)+(wh-1))*32L程序例:#include 〈graphics.h〉#include 〈stdio.h〉#include 〈fcntl.h〉#include 〈io.h〉#include 〈stdlib.h〉#include 〈conio.h〉#define ROW 1 //纵坐标放大倍数#define COL 2 //横坐标放大倍数void main(){int x,y;char *s=″汉字显示程序″;FILE *fp;char buffer[32]; //buffer用来存储一个汉字register m,n,i,j,k;unsigned char qh,wh;unsigned long offset;int gd=DETECT,gm; //图形屏幕初始化initgraph(&gd,&gm,″″);if ((fp=fopen(″hzk16″,″rb″))==NULL) //翻开汉字库,该字库可以在ucdos中找到{ printf(″Can’t open haz16,Please add it″);getch(); closegraph(); exit(0);}x=20; y=100; //显示位置设置while(*s){ qh=*(s)-0xa0; //汉字区位码wh=*(s+1)-0xa0;offset=(94*(qh-1)+(wh-1))*32L; //计算该汉字在字库中偏移量fseek(fp,offset,SEEK_SET);fread(buffer,32,1,fp); //取出汉字32字节的点阵字模存入buffer中(一个汉字)for (i=0;i〈16;i++) //将32位字节的点阵按位在屏幕上打印出来(1:打印,0:不打印),显示汉字for(n=0;n〈ROW;n++)for(j=0;j〈2;j++)for(k=0;k〈8;k++)for(m=0;m〈COL;m++)if (((buffer[i*2+j]〉〉(7-k))&0x1)!=NULL)putpixel(x+8*j*COL+k*COL+m,y+i*ROW+n,GREEN);s+=2; //由于一个汉字内码占用两个字节,所以s必需加2x+=30;}getch();closegraph();}上述程序在Turbo C 2.0编译系统下运行胜利,它可以将汉字放大显示,读者可以将它改成函数用在您的程序中显示汉字。

C语言是如何用16点阵方法输出汉字的

C语言是如何用16点阵方法输出汉字的

C语言是如‎何用16点‎阵方法输出‎汉字的?到目前为止‎,我们编写的‎C程序,其用于人机‎交互的提示‎或菜单都是‎英文的,那么如何在‎没有汉化的‎T u rbo‎C集成开发环‎境下编制显‎示汉字的程‎序呢?解决这一编‎程问题,我们首先必‎须了解有关‎汉字编码及‎字库的知识‎。

根据对汉字‎使用频率的研‎究,可把汉字分‎成高频字(约100 个),常用字(约3000‎个),次常用字(约4000‎个),罕见字(约8000‎个)和死字(约4500‎0个),即正常使用‎的汉字达1‎5000 个。

我国198‎1年公布了《通讯用汉字‎字符集(基本集)及其交换码‎标准》GB231‎2-80 方案,把高频字、常用字、和次常用字集‎合成汉字基‎本字符集(共6763‎个),在该集中按‎汉字使用的‎频度,又将其分为‎一级汉字37‎55 个(按拼音排序‎)、二级汉字3‎008 个(按部首排序‎),再加上西文‎字母、数字、图形符号等7‎00 个。

汉字编码:区位码国家标准的‎汉字字符集‎(GB231‎2—80)在汉字操作‎系统中是以‎汉字库的形‎式提供的。

汉字库结构作‎了统一规定‎,即将字库分‎成94 个区,每个区有9‎4个汉字(以位作区别)每一个汉字‎在汉字库中‎有确定的区‎和位编号(用两个字节‎),这就是所谓‎的区位码(区位码的第‎一个字节表‎示区号,第二个字节‎表示位号,因而只要知‎道了区位码‎,就可知道该汉字在字‎库中的地址‎,每个汉字在‎字库中是以‎点阵字模形‎式存储的,如一般采用‎16×16点阵形式,每个点用一‎个二进位表‎示,存1 的点,当显示时,可以在屏上‎显示一个亮‎点,存0 的点,则在屏上不‎显示,这样把存某‎字的16×16 点阵信息直‎接用来在显‎示器上按上‎述原则显示,则将出现对‎应的汉字。

内码汉字使用两‎字节表示,国家制定了‎统一标准,称为国标码‎。

国标码规定‎,每个字节使‎用后面7 位,第一位为0‎。

vc++读取文本文件

vc++读取文本文件

我给你写了两个例子,你看看:1)第一个是读出数字:#include<stdio.h>int a[10];void readtxt(){int i;FILE *zz;zz=fopen("你要打开的文本文件的名字","r"); for(i=0;i<10;i++)fscanf(zz,"%d,",&a[i]);fclose(zz);}void main(){int i;readtxt();for(i=0;i<10;i++)printf("%d\n",a[i]);}2)第二个是读出字母:#include <stdio.h>char xx[8][8];void main(){FILE *zz;int i;zz=fopen("你要打开的文本文件.txt","r"); if(zz==NULL){printf("无法打开文本文件!");return;}for(i=0;i<4;i++){fscanf(zz,"%s",xx[i]);printf("%s\n",xx[i]);}fclose(zz);}#include "stdafx.h"#include <string.h>#include <stdio.h>#include <stdlib.h>#define PATHNAME "E:/1.txt"#define COUNT 2064int getMark(char*, char[]);int getAttr(char* , float[], int*);int checkData(char*);int main(int argc, char* argv[]){int* pMark = NULL;float* pAttr[COUNT];char* buff = NULL;char ch[9];float attr[24];int i = 0;int icnt;FILE* pf = NULL;if (!(pf = fopen(PATHNAME, "r+"))) {printf("error!!!");return 0;}pMark = new int[COUNT];if (!pMark) {printf("error!!!");return 0;}memset(pMark, 0, COUNT*sizeof(int));buff = new char[256];if (!buff) {printf("error!!!");return 0;}memset(buff, 0, 256*sizeof(char));while (!feof(pf) && i < COUNT) { // 1.判断文件是否到了结尾2.判断读取行数是否超过COUNTpAttr[i] = new float[24];if (!pAttr[i]) {printf("error!!!");return 0;}memset(pAttr[i], 0, 24*sizeof(float));i++;fgets(buff, 256, pf); // 读取256字节数据或者到一行结束的数据if (checkData(buff) == -1)continue;memset(ch, 0, 9*sizeof(char));getMark(buff, ch); // 得到每行的第一个数据里*(pMark + i - 1) = atoi(ch); // 写到第一个数组里memset(attr, 0, 24*sizeof(float));getAttr(buff, attr, &icnt); // 得到每行的其它数据后,存在数组attr里memcpy(pAttr[i - 1], attr, (icnt+1)*sizeof(float)); // 将数组attr中的数据拷贝到第二个数组里}/*1.txt:1, 0.056183, 0.015906, 0.003513, 0.000283, 0.000003, 0.000828, 0.1118111, 0.020147, 0.005431, 0.001509, 0.000059, 0.000003, 0.000797, 0.1118082, 0.026044, 0.001199, 0.001091, 0.000081, 0.000003, 0.000794, 0.1118062, 0.090909, 0.008505, 0.003210, 0.001535, 0.000004, 0.000909, 0.1115623, 0.354464, 0.198575, 0.028486, 0.024844, 0.000663, 0.012116, 0.1132983, 0.552498, 0.364998, 0.240247, 0.210239, 0.047230, 0.130700, 0.010317*(pMark+0) = 1;*(pMark+1) = 1;*(pMark+2) = 2;*(pMark+3) = 2;*(pMark+4) = 3;*(pMark+5) = 3;...*(pAttr[0]+0) = 0.056183*(pAttr[0]+1) = 0.015906...*(pAttr[1]+0) = 0.020147*(pAttr[1]+1) = 0.005431...*/delete [] pMark;delete [] buff;for (int j = 0; j < i; j++) {delete [] pAttr[j];}fclose(pf);return 0;}int checkData(char* buff){/*此处为数据格式check,过程省略。

C#随机生成汉字【获取随机的四个汉字、随机字符串】

C#随机生成汉字【获取随机的四个汉字、随机字符串】

C#随机生成汉字【获取随机的四个汉字、随机字符串】using System;using System.Collections.Generic;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Data.SqlClient;using System.Data;using mon;using isports.appcode;using System.IO;using System.Text;namespace isports.appadmin{public partial class admin_reguser : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){//StreamWriter sw = new StreamWriter(Server.MapPath(".") + "\\jilu.txt");//sw.WriteLine("");//sw.Flush();//sw.Close();//D:\cc\源码\上海爱动网电子商务系统\isports\isports\appadmin\jilu.txt//Encoding gb = Encoding.GetEncoding("gb2312");//object[] bytes = CreateRegionCode(4);// Response.Write(byteToHexStr(bytes));Encodinggb=System.Text.Encoding.GetEncoding("gb2312");object[] bytes = CreateRegionCode(3);string str1 = gb.GetString((byte[])Convert.ChangeType(bytes[0],typeof(byte[])));string str2 = gb.GetString((byte[])Convert.ChangeType(bytes[1],typeof(byte[])));string str3 = gb.GetString((byte[])Convert.ChangeType(bytes[2],typeof(byte[])));Response.Write(str1+str2+str3);}public static object[] CreateRegionCode(int strlength){//定义一个字符串数组储存汉字编码的组成元素string[] rBase = new String[16] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };Random rnd = new Random();//定义一个object数组用来object[] bytes = new object[strlength];/**//*每循环一次产生一个含两个元素的十六进制字节数组,并将其放入bject数组中每个汉字有四个区位码组成区位码第1位和区位码第2位作为字节数组第一个元素区位码第3位和区位码第4位作为字节数组第二个元素*/for (int i = 0; i < strlength; i++){//区位码第1位int r1 = rnd.Next(11, 14);string str_r1 = rBase[r1].Trim();//区位码第2位rnd = new Random(r1 * unchecked((int)DateTime.Now.Ticks) + i);//更换随机数发生器的//种子避免产生重复值int r2;if (r1 == 13){r2 = rnd.Next(0, 7);}else{r2 = rnd.Next(0, 16);}string str_r2 = rBase[r2].Trim();//区位码第3位rnd = new Random(r2 * unchecked((int)DateTime.Now.Ticks) + i);int r3 = rnd.Next(10, 16);string str_r3 = rBase[r3].Trim();//区位码第4位rnd = new Random(r3 * unchecked((int)DateTime.Now.Ticks) + i);int r4;if (r3 == 10){r4 = rnd.Next(1, 16);}else if (r3 == 15){r4 = rnd.Next(0, 15);}else{r4 = rnd.Next(0, 16);}string str_r4 = rBase[r4].Trim();//定义两个字节变量存储产生的随机汉字区位码byte byte1 = Convert.ToByte(str_r1 + str_r2, 16); byte byte2 = Convert.ToByte(str_r3 + str_r4, 16); //将两个字节变量存储在字节数组中byte[] str_r = new byte[] { byte1, byte2 };//将产生的一个汉字的字节数组放入object数组中bytes.SetValue(str_r, i);}return bytes;}#region 随机字符串public string Get_MailStr(Random ranA){//如果随机数A=3,则运行生成小写字母//生成随机数A,范围在97-122//把随机数A,转成字符//生成完,位数+1,字符串累加,结束本次循环//Random ranA = new Random();string strB = string.Empty;int intResultRound = 0;//生成5~8随机数int intLength = ranA.Next(5, 8);while (intResultRound < intLength){int intA = ranA.Next(98, 123);if (intA == 101 || intA == 105 || intA == 111 || intA == 117 ||intA == 118){intA = ranA.Next(98, 123);}else{strB = ((char)intA).ToString() + strB;intResultRound = intResultRound + 1;}}return strB;}#endregion#region 拼接sql语句返回sql字符串public string Get_SqlStr(string email, string password, string anw, string daan){string sql = string.Empty;string sql1 = "declare @unid int begin tran ";string md5pwd = mon.T ext.MD5(password);string sql2 = string.Format("insert into tb_User(U_LOGINNAME,U_REALPASSWORD,U_PASSWORD,U_M OBILE,U_EMAIL,M_MARK,U_LEVEL,U_LOGINDATE,U_LEVELID,U_ MONEY,U_EXPRIENCE,U_REGFROM,U_QUESTION,U_ANSWER,U_ LASTLOGIN,U_LASTIP,U_STATUS,U_KEEPTIME,U_LOGINTIMES,U_ QUITORDERNO,U_ALLORDERNUM,U_AUTOROLE)values('','','{1}','','{0}',0,1,GETDATE(),5,0,0,0,'{2}','{3}',GETDATE(),'12 7.0.0.1','1',0,0,0,0,'0')", email, md5pwd, anw, daan);string sql3 = "set @unid=(select max(U_NID) from tb_User) insert into tb_UserField(M_ID,M_IP) values(@unid,'127.0.0.1') ";string sql4 = " if @@error=0 begin commit tran end else begin rollback tran end ";sql = sql1 + sql2 + sql3 + sql4;return sql;}#endregion#region 判断邮箱是否重复public bool Get_mailpan(string email){bool str = false;string conStr = System.Configuration.ConfigurationManager.ConnectionStrings[ "WebSiteConnectionString"].T oString();SqlConnection conn = new SqlConnection(conStr);SqlCommand cmd = new SqlCommand();mandText = "admin_mail";mandType = CommandType.StoredProcedure;cmd.Connection = conn;conn.Open();SqlParameter sp = new SqlParameter("@productmail", SqlDbType.NVarChar);sp.Value = email.Trim();cmd.Parameters.Add(sp);//定义输出参数sp = new SqlParameter("@outputValue", SqlDbType.Int);sp.Direction = ParameterDirection.Output;cmd.Parameters.Add(sp);cmd.ExecuteNonQuery();int shu = Convert.T oInt32(cmd.Parameters[1].Value.ToString());conn.Close();if (shu == 0)str = true;elsestr = false;return str;}#endregion}}.Net程序处理汉字编码原理分析在.Net中可以使用System.Text来处理所有语言的编码。

在vc中实现获取汉字拼音的首字母

在vc中实现获取汉字拼音的首字母

在vc中实现获取汉字拼⾳的⾸字母在中实现获取汉字拼⾳的⾸字母void GetFirstLetter(CString strName, CString& strFirstLetter){TBYTE ucHigh, ucLow;int nCode;CString strRet;strFirstLetter.Empty();for (int i=0; i<strName.GetLength(); i++){if ( (TBYTE)strName[i] < 0x80 )continue;ucHigh = (TBYTE)strName[i];ucLow = (TBYTE)strName[i+1];if ( ucHigh < 0xa1 || ucLow < 0xa1)continue;else// Treat code by section-position as an int type parameter,// so make following change to nCode.nCode = (ucHigh - 0xa0) * 100 + ucLow - 0xa0;FirstLetter(nCode, strRet);strFirstLetter += strRet;i++;}}void FirstLetter(int nCode, CString& strLetter){if(nCode >= 1601 && nCode < 1637) strLetter = _T("A");if(nCode >= 1637 && nCode < 1833) strLetter = _T("B");if(nCode >= 1833 && nCode < 2078) strLetter = _T("C");if(nCode >= 2078 && nCode < 2274) strLetter = _T("D");if(nCode >= 2274 && nCode < 2302) strLetter = _T("E");if(nCode >= 2302 && nCode < 2433) strLetter = _T("F");if(nCode >= 2433 && nCode < 2594) strLetter = _T("G");if(nCode >= 2594 && nCode < 2787) strLetter = _T("H");if(nCode >= 2787 && nCode < 3106) strLetter = _T("J");if(nCode >= 3106 && nCode < 3212) strLetter = _T("K");if(nCode >= 3212 && nCode < 3472) strLetter = _T("L");if(nCode >= 3472 && nCode < 3635) strLetter = _T("M");if(nCode >= 3635 && nCode < 3722) strLetter = _T("N");if(nCode >= 3722 && nCode < 3730) strLetter = _T("O");if(nCode >= 3730 && nCode < 3858) strLetter = _T("P");if(nCode >= 3858 && nCode < 4027) strLetter = _T("Q");if(nCode >= 4027 && nCode < 4086) strLetter = _T("R");if(nCode >= 4086 && nCode < 4390) strLetter = _T("S");if(nCode >= 4390 && nCode < 4558) strLetter = _T("T");if(nCode >= 4558 && nCode < 4684) strLetter = _T("W");if(nCode >= 4684 && nCode < 4925) strLetter = _T("X");if(nCode >= 4925 && nCode < 5249) strLetter = _T("Y");if(nCode >= 5249 && nCode < 5590) strLetter = _T("Z");}How to use:CString strName, strRes;strName = _T("A李⼩三");GetFirstLetter(strName, strRes);//Then the value of strRes is "LXS".附录1:汉字编码原则1.国家标准汉字代码体系汉字字数繁多,属性丰富,因⽽汉字代码体系也较复杂,包括:(1)汉字机内码。

C++对文本文件的读取和输出

C++对文本文件的读取和输出

C++对⽂本⽂件的读取和输出本⽂转载⾃⾃⼰浏览了上⽅的博客,主要整理了⼀下关于C++对⽂件的输⼊输出⽅法,如果想看C语⾔的输⼊输出⽅法,可浏览上述链接的博客C++读写函数在C++中,对⽂件的操作是通过stream的⼦类fstream来实现的。

要⽤这种⽅式操作⽂件,就必须加⼊头⽂件fstream.h,也可以写成fstream。

⽂本⽂件读操作函数open的原型是*void open(const char filename,int mode,int access)。

参数filename:要打开的⽂件名;参数mode:要打开⽂件的⽅式;access:打开⽂件的属性。

打开⽂件的⽅式在类ios(是所有流式I/O类的基类)中定义,常⽤的值如下(可以⽤“|”或者“+”把以下属性连接起来):ios::in 以只读⽅式打开⽂件ios::out 以只写⽅式打开⽂件ios::app 以追加(写)⽅式打开⽂件....(上述博客中提到的其余三种在我的DEVC++上显⽰没有,所以需要其他功能的⾃⾏百度)写操作在C++语法中,⽂本⽂件输出函数的重点也是对输出格式的控制。

这⾥是通过调⽤标准库中相应的输出格式设置函数来实现的,调⽤时需要包含头⽂件iomanip.h。

⽐较常⽤的格式控制函数有:字符宽度设置函数setw(int);默认填充字符设置函数setfill(char);输出精度设置函数setprecision(int)。

可⾃⾏结合下列进⾏尝试。

代码测试这个代码要解决的问题是:给定⼀个整数数组ar, 其中只有⼀个数出现了奇数次数,其他的数都是偶数词,打印这个数。

本⽂中使⽤的是常规⽅法,更巧妙的求解是采⽤异或进⾏运算,留给读者⾃⼰尝试。

运⾏之前的text.txt⽂件内容为/*C++读写⽂件测试*/#include<iostream>#include<cstring>#include<fstream>//读写头⽂件#include<algorithm>//算法头⽂件using namespace std;int main(){int arr[40],n;string filepath="text.txt";ifstream pin;//ifstream,ofstream都是类名,定义的pin,put就是⼀个类的变量,通过该变量可以替代cin,cout进⾏输⼊,输出ofstream put;put.open(filepath.c_str(), ios::app);pin.open("text.txt",ios::in);pin>>n;//从⽂件中读⼊nfor(int i=0;i<n;i++) pin>>arr[i];//从⽂件中读⼊各个数// int n=sizeof(arr)/sizeof(arr[0]);//注意strlen是统计字符数组的长度,⽽不能统计char类型,// cout<<n;sort(arr,arr+n);//利⽤algorithm中的库函数for(int i=0;i<n;i=i+2){if(arr[i]!=arr[i+1]){put<<endl;put<<setw(6)<<setfill('*')<<arr[i]<<endl;//将arr[i]写⼊filepath下的⽂件中break;}}double k = 192.9773;put<<setprecision(6)<<k<<endl;return0;}运⾏之后text.txt中的结果如下:。

如何利用CC++逐行读取txt文件中的字符串(可以顺便实现文本文件的复制)

如何利用CC++逐行读取txt文件中的字符串(可以顺便实现文本文件的复制)

如何利用CC++逐行读取txt文件中的字符串(可以顺便实现文本文件的复制)如下代码均在Windows/VC++6.0下测试通过,请一定注意Linux和Windows文件格式的区别先用C语言写一个丑陋的程序:[cpp]1. #include <stdio.h>2. #include <stdlib.h>3. int main()4. {5. FILE *fp;6. if(NULL == (fp = fopen("1.txt", "r")))7. {8. printf("error\n");9. exit(1);10. }11.12. char ch;13. while(EOF != (ch=fgetc(fp)))14. {15. printf("%c", ch);16. }17.18. fclose(fp);19.20. return 0;21. }你只能看到结果,却没法利用每一行。

我们来改为:[cpp]1. // VC++6.02.3. #include <stdio.h>4. #include <string.h>5.6. int main()7. {8. char szTest[1000] = {0};9. int len = 0;10.11. FILE *fp = fopen("1.txt", "r");12. if(NULL == fp)13. {14. printf("failed to open dos.txt\n");15. return 1;16. }17.18. while(!feof(fp))19. {20. memset(szTest, 0, sizeof(szTest));21. fgets(szTest, sizeof(szTest) - 1, fp); // 包含了\n22. printf("%s", szTest);23. }24.25. fclose(fp);26.27. printf("\n");28.29. return 0;30. }这样,我们就是整行读取了。

字模的原理和获取

字模的原理和获取
字模获取工具的制作
分析过字模的原理后,就可以来编写工具,首先要准备字库文件,HZK16.DAT,可以从网上下载。
根据原理,先打开文件,然后根据汉字的内码获取区码和位码,然后根据区吗和位码索引到文件中的地址,再读取32个字节数据到BUFFER中即大功告成。
下面是VC中的一段代码,供参考:
view plaincopy to clipboardprint?
HZK16文件是按照GB 2312-80标准,也就是通常所说的国标码或区位码的标准排列的。国标码分为94个区(Section),每个区94个位(Position),所以也称为区位码。其中01~09区为符号、数字区,16~87区为汉字区。而10~15区、88~94区是空白区域。
如何取得汉字的区位码呢?在计算机处理汉字和ASCII字符时,使每个ASCII字符占用1个字节,而一个汉字占用两个字节,其值称为汉字的内码。其中第一个字节的值为区号加上32(20H),第二个字节的值为位号加上32(20H)。为了与ASCII字符区别开,表示汉字的两个字节的最高位都是1,也就是两个字节的值都又加上了128(80H)。这样,通过汉字的内码,就可以计算出汉字的区位码。
}
else //是汉字,则直接转换
{
AnsiCode[1]=m_strFont.GetAt(1);
}
qh=AnsiCode[0]-160; //区码和位码
wh=AnsiCode[1]-160;
location=(94*(qh-1)+(wh-1))*32; //HZK16中的索引32是一个字的字模字节数
fp=fopen("HZK16.dat","r");
if(fp==NULL)
{

C++读取文本文件

C++读取文本文件

C++读取文本文件展开全文写在开始最近在做一个东东,遇到文件读取的问题,遂开始研究,使用C++读取文本文件比较简单,也是一个很好的切入点,所以进行了一些小实验。

这里仅仅举例,使用ANSI,UNICODE,UTF-8三种常用的文本文件作为示例。

关于文本文件的文件头第一 ANSI文件的文件头为空,不需要处理;第二UNICODE文件的文件头为0xFF,0xFE共计两个字节,读取时需要偏移两个字节再行读取;第三UTF-8文件的文件头为0xEF,0xBB,0xBF共计三个字节,读取时需要偏移三个字节后再行读取;关于文本文件类型的判断根据文本文件的文件头,就可以判断文本文件的类型了。

假设有如下文件类型定义:typedef enum FileType{ANSI = 0,UNICODE,UTF8,}FILETYPE;我们就可以根据上述特性,来判断文本文件的类型了,下面是一段示例代码:FILETYPE GetTextFileType(const std::string & strFileName) {FILETYPE fileType = ANSI;std::ifstream file;file.open(strFileName.c_str(), std::ios_base::in);bool bUnicodeFile = false;if (file.good()){char szFlag[3] = {0};file.read(szFlag, sizeof(char) * 3);if ((unsigned char)szFlag[0] == 0xFF&& (unsigned char)szFlag[1] == 0xFE){fileType = UNICODE;}else if ((unsigned char)szFlag[0] == 0xEF&& (unsigned char)szFlag[1] == 0xBB&& (unsigned char)szFlag[2] == 0xBF){fileType = UTF8;}}file.close();return fileType;ANSI文本文件的读取ANSI文本文件不需要进行文件头的处理,可以直接读取。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
我们刚刚输出“王”的内码为:205(高字节),245(低字节)。由上面的换算关系,可以得到“王”字的区位码为:
区码=205-160=45
位码=245-160=85
查一下区位码表,4585所表示的汉字正好是“王”。
也可以打开输入法,选择内码输入法,然后选择区位码,输入4585,就会输出“王”字。
English char = 65,
Chinease char= 205,245,
查ASCII码字符表,很容易得到A的ASCII码为65。
我们可以查ASCII码表,得到出ASCII码对应的字符,那我们有什么办法来知道一个汉字内码对应的汉字了?
让我们先来认识一下区位码:
1981年5月,我国国家标准总局颁布了《信息交换用汉字编码字符集》(GB2312-80),简称国家标准汉字编码,也叫国标码。国标码共收进标准字符7445个。其中一级汉字3755个,二级汉字3008个,共计6763个汉字。 由于汉字的字符多,一个字节(即8位二进制代码)不足以表示所有的常用汉字。汉字国标码的每个汉字或符号在计算机中都使用2个字节(16位二进制)代码来表示。
void getAscCode(char *c,char buff[])
{
unsigned long offset;
FILE *ASC;
/*打开字库文件asc16*/
if((ASC=fopen("asc16","rb"))==NULL){
printf("Can't open asc,Please add it?");
在GB2312-80代码表中,纵向分为0~93,共94行。将行号称为区号,列号称为位号,分别有94个区和94个位。区号和位号用十进制表示,不足两位前面补0。这样每个汉字或符号都可用4位十进制表示。这就是我们常说的区位码。每一区共有94个汉字,而位记录该汉字在该区中的具体位置。(记得我们以前读书的时候,报考计算机考试,填写姓名都要我们用区位码填,我们都拿着自己的姓名一个个去查,我们查的那个东东就是区位码。现在想想,真是心寒呀。还好,我后来就没有查了,弄了个excel的宏。把班上人的姓名全部放到一个excel中,然后一点鼠标,哈哈…… 区位码全自动出来了)。
看一个C程序示例:
main()
{
unsigned char *s,*e="A",*c="王";
clrscr();
printf("English char =");
s=e;
while(*s!=0) /*C的字符串以0为结束符*/
{
printf("%3d,",*s);
**
**
**
** **
**************************
**
printf("ASCII:%d,offset:%d \n\r",*c,offset);
}
/**********************************
* 得到汉字字符的字模信息,存入数组
* 参数:
* *c:要得到字模信息的字符指针
* buffer[]:存储字模信息的数组
用过UCDOS(或者CCDOS,估计现在只有少数人还知道UCDOS是什么东东)的人应该知道,通过UCDOS可以让DOS系统下正确的显示中文目录。不通过UCDOS之类的软件,在纯DOS下,我们看到的中文目录会是一堆的乱码,而英文目录能够正确显示,这是什么原因了。
这是因为,英文的字模信息是一般固化在ROM里。中文字模信息一般记录在一个专门的文件中,这个文件在UCDOS和CCDOS中都有,文件名是HZK16。也就是16x16点阵的汉字字模信息,所谓16x16,就是说这个汉字在横向有16个点,和纵向16个点的区域里显示。还有24x24,32x32等。
qh = *(c) -0xa0; /*10进制的160等于16进制的A0*/
wh = *(c+1) -0xa0; /*获得区码与位码*/
offset = (94*(qh-1)+(wh-1))*32L;/*计算该汉字在字库中偏移量*/
s++;
}
printf("\nChinease char=");
s=c;
while(*s!=0)
{
printf("%3d,",*s);
s++;
}
getch();
}
编译运行以后,输出的结果为:
是不是觉得很有意思了?
汉字内码:
我们都知道,英文只有少数的几十个字符,在计算机中用一个字节可以很容易的表示出来(也就是ASCII码);而汉字由于结构本身的原因,数量很大,常用的也有几千个。显然计算机中按照英文字符的方式对处理汉字是不可取的。
由是前人们就将ASCII表的高128位很少用到的数值以两个为一组来表示汉字,这就是汉字的内码。而剩下的低128位则留给英文字符使用,即英文的内码。
我们也可以在UCDOS下找到英文字模的信息文件,文件名是ASC16,这里记录了英文字符的字模信息。ASC16文件记录的英文字符是8x16点阵的。这些记录字符字模信息的文件通常也叫字库文件。
ASC16文件的大小刚好为 4K (4,096 个字节),每一英文字符横向有8个点,纵向有16个点。也就是说要描述一个英文字符的点阵信息,必须要16*8=128bit=16Byte。而英文字符是一个字节表示,所能表示的最字符数为2的8次方,也就是256个字符(ASCII中是从0到255)。256个字符*16(每个字符要16个字节) = 4096 字节。 刚好为ASC16文件的大小。因此,我们要读取英文字模的信息,我们就先得到这个字符的ASCII码。
现在我们知道,可以从区位码得到汉字,也可以从汉字反查出区位码。那么我们如何从内码得到区位吗?
汉字内码与区位码之间有一个简单的数学关系:
内码高字节 = 区码+A0H = 区码+160
内码低字节 = 位码+A0H = 区码+160
这个转换关系,我也不清楚原因,有谁知道还望指点。网上的大师们说这样转换,咱们就这样转换吧。
完整的原程序代码如下:
程序代码
/**********************************
* C 程序得到汉字字模信息
* by DreamTime [梦想年华]
* fanwsp@
*
* 2007-11
***********************************/
同样,我们来看一下汉字字模。
汉字是16*16的所以描述一个汉字字模信息的大小为:16*16=256bit=32Byte,汉字是按照区位码的顺序来排列的。
我们以得到”王“字的字模信息为例:
我们先得到”王“字的内码为:205,245,根据内码与区位码的转换关系得到”王“字的区位码为:45,85。
* 无返回值
***********************************/
void getHzKCode(char *c,char buff[])
{
unsigned char qh,wh;
unsigned long offset;
FILE *HZK;
/*打开字库文件hzk16*/
以得到字符"A"的字模信息为例:
假如我们要得到的字母A的字模信息,我们得到"A"的ASCII值为65,我们就可以算出字符"A"的字模信息在ASC16文件中的偏移量=(65*16)+1=1041字节(注意这个数字,我们将在后面用程序进行验证),我们只需要从ASC16文件中1041字节开始读取16个字节就可以得到"A"的字模信息了。
if((HZK=fopen("hzk16","rb"))==NULL){
printf("Can't open haz16,Please add it?");
getch();
exit(0);
}
/*区码=内码(高字节)-160 位码=内码(低字节)-160*/
##...##.
##...##.
........
........
........
........
........
这就是点阵字,也就是根据字符的字模用符号画出来的,当然你可以把*号#号改成其它的任何符号都可以。
fseek(HZK,offset,SEEK_SET); /*将文件指针移动到偏移量的位置*/
由前面区位码介绍中,我们知道,每一区有94个汉字,位号表示在该区的位置。因此“王”字中区位码中的位置为:
94*(区号-1) + (位号-1) = 94*((45-1)+(85-1)) = 4220。
而每一个汉字占32个字节,因此我们得到“王”字在字库文件(HZK16)中的偏移量为:4220*32=135040字节(注意这个数字,我们在后面将用程序进行验证)。我们只需要从HZK16文件中135040字节开始读取32个字节就可以得到“王”字的字模信息了。
**
**
**
**
** **
******************************
汉字字模:
现在让我们来认识一下什么是字模,所谓字模就是是汉字(或者字符)的形态。字模中保存了汉字的点阵信息,记录组成一个字符的点在何处显示,在何处不显示。我们只要得到汉字的字模,我们就可以很容易的程序来控制,把这个字符画出来。
相关文档
最新文档