StringOperation.cpp 34 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985
  1. #include "stdafx.h"
  2. #include "memory.h"
  3. #include "string.h"
  4. #include "malloc.h"
  5. #include "ctype.h"
  6. #include "Const.h"
  7. #include "StringOperation.h"
  8. char strDigitFile[16][5] = {"0", "1", "2", "3", "4",
  9. "5", "6", "7", "8", "9",
  10. "shi", "bai", "qian", "wan",
  11. "yi", "dian"};
  12. char strDigitFileEx[16][5] = {"零", "壹", "贰", "叁", "肆",
  13. "伍", "陆", "柒", "捌", "玖",
  14. "shi", "bai", "qian", "wan",
  15. "yi", "dian"};
  16. void RTrim(char *strSour)
  17. {
  18. int iLen = 0;
  19. char *strDest = NULL;
  20. iLen = strlen(strSour);
  21. strDest = strSour + iLen - 1;
  22. if (strcmp(strSour, "") == 0)
  23. return;
  24. if (Spaces(strSour))
  25. {
  26. *strSour = '\0';
  27. return;
  28. }
  29. while ((*strDest == 0x20)||(*strDest == 0x0D)||(*strDest == 0x0A)||(*strDest == 0x09))
  30. strDest--;
  31. *(++strDest) = '\0';
  32. }
  33. void LTrim(char *strSour)
  34. {
  35. int iIndex = 0;
  36. int iLen = 0;
  37. char *strTmp = NULL;
  38. if (strcmp(strSour, "") == 0)
  39. return;
  40. iLen = strlen(strSour);
  41. if (Spaces(strSour))
  42. {
  43. *strSour='\0';
  44. return;
  45. }
  46. strTmp = strSour;
  47. for (iIndex = 0; *strTmp && ((*strTmp == 0x20)||(*strTmp == 0x0A)||(*strTmp == 0x0d)||(*strTmp == 0x09)); strTmp++, iIndex++);
  48. memmove(strSour, strTmp, iLen);
  49. }
  50. int Spaces(char *strSour)
  51. {
  52. char *strDest = strSour;
  53. while (*strDest)
  54. {
  55. if (*strDest == ' ')
  56. strDest++;
  57. else
  58. return 0;
  59. }
  60. return 1;
  61. }
  62. void AllTrim(char *strSour)
  63. {
  64. if (strcmp(strSour, "") == 0)
  65. return;
  66. RTrim(strSour);
  67. LTrim(strSour);
  68. }
  69. void InsertChar(char *strSour, int iPos, char cChar)
  70. {
  71. char *strDest = NULL;
  72. strDest = _strdup(strSour + iPos);
  73. memcpy(strSour + iPos + 1, strDest, strlen(strDest));
  74. strSour[iPos] = cChar;
  75. free(strDest);
  76. }
  77. int FindChar(char *strSour, int iPos, char cChar)
  78. {
  79. char *strDest = NULL;
  80. unsigned int iIndex = 0;
  81. strDest = strSour + iPos;
  82. for ( iIndex = 0; iIndex < strlen(strDest); iIndex++)
  83. {
  84. if (*(strDest + iIndex) == cChar)
  85. break;
  86. }
  87. if (iIndex >= strlen(strDest))
  88. {
  89. return -1;
  90. }
  91. return (strDest + iIndex- strSour);
  92. }
  93. int DeleteChar(char *strSour, int iPos, int iCount)
  94. {
  95. char *strDest = NULL;
  96. strDest = strSour + iPos + iCount;
  97. if ((iPos + iCount) > (int)strlen(strSour))
  98. return -1;
  99. memmove(strSour + iPos, strDest, strlen(strSour));
  100. return 0;
  101. }
  102. int GetStringSpeak(char *strSour, int iMaxLen, char *strVoc)
  103. {
  104. int iIndexSour = 0;
  105. int iLenSour = 0;
  106. char strDigit[2] = "";
  107. iLenSour = strlen(strSour);
  108. if (iMaxLen < iLenSour * 2)
  109. return 0;
  110. strcpy(strVoc, "");
  111. for (iIndexSour = 0; iIndexSour < iLenSour; iIndexSour++)
  112. {
  113. strDigit[0] = strSour[iIndexSour];
  114. strDigit[1] = '\0';
  115. if (strDigit[0] == '.')
  116. {
  117. strcat(strVoc, "Dian");
  118. if (iIndexSour != iLenSour - 1)
  119. strcat(strVoc, ",");
  120. }
  121. else
  122. {
  123. strcat(strVoc, strDigit);
  124. if (iIndexSour != iLenSour - 1)
  125. strcat(strVoc, ",");
  126. }
  127. }
  128. return 1;
  129. }
  130. int GetDigitSpeak(char *strSour, int iMaxLen, char *strVoc)
  131. {
  132. int iIndexSour = 0;
  133. int iLenSour = 0;
  134. int iIndex = 0;
  135. int iPosition = 0;
  136. int iLength = 0;
  137. int iRetCode = 0;
  138. char strDigit[MAX_DIGIT_LENGTH + 1] = "";
  139. char strValue[MAX_FILE_LENGTH + 1];
  140. char strVocNew[MAX_FILE_LENGTH * 10 + 1];
  141. int iIndexFlag0 = 0;
  142. if (strSour[strlen(strSour) - 1] == '.')
  143. strSour[strlen(strSour) - 1] = '\0';
  144. if (!IsAllDigit(strSour))
  145. return 0;
  146. if (atoi(strSour) >= 10000000000000000)
  147. return 0;
  148. iLenSour = strlen(strSour);
  149. //整数
  150. memset(strValue, 0, sizeof(strValue));
  151. iPosition = FindChar(strSour, 0, '.');
  152. if (iPosition > 0)
  153. {
  154. strncpy(strValue, strSour, iPosition);
  155. AllTrim(strValue);
  156. }
  157. else if (iPosition == 0)
  158. {
  159. strcpy(strValue, "0");
  160. strcat(strValue, strSour);
  161. }
  162. else
  163. {
  164. strcat(strValue, strSour);
  165. }
  166. sprintf(strVocNew, "%d", atoi(strValue));
  167. strcpy(strValue, strVocNew);
  168. strcpy(strVocNew, "");
  169. iIndex = 0;
  170. iIndexFlag0 = 0;
  171. iLength = strlen(strValue);
  172. if (atoi(strValue) >= 1000000000000000)
  173. {
  174. strDigit[0] = strValue[iIndex];
  175. strDigit[1] = '\0';
  176. if (atoi(strDigit) > 0)
  177. {
  178. if (iIndexFlag0 == -1)
  179. {
  180. strcat(strVocNew, "0");
  181. strcat(strVocNew, ",");
  182. }
  183. iIndexFlag0 = iIndex;
  184. strcat(strVocNew, strDigit);
  185. strcat(strVocNew, ",");
  186. strcat(strVocNew, "qian");
  187. strcat(strVocNew, ",");
  188. }
  189. else
  190. {
  191. if (iIndexFlag0 >= 0)
  192. iIndexFlag0 = -1;
  193. }
  194. iIndex++;
  195. }
  196. if (atoi(strValue) >= 100000000000000)
  197. {
  198. strDigit[0] = strValue[iIndex];
  199. strDigit[1] = '\0';
  200. if (atoi(strDigit) > 0)
  201. {
  202. if (iIndexFlag0 == -1)
  203. {
  204. strcat(strVocNew, "0");
  205. strcat(strVocNew, ",");
  206. }
  207. iIndexFlag0 = iIndex;
  208. strcat(strVocNew, strDigit);
  209. strcat(strVocNew, ",");
  210. strcat(strVocNew, "bai");
  211. strcat(strVocNew, ",");
  212. }
  213. else
  214. {
  215. if (iIndexFlag0 >= 0)
  216. iIndexFlag0 = -1;
  217. }
  218. iIndex++;
  219. }
  220. if (atoi(strValue) >= 10000000000000)
  221. {
  222. strDigit[0] = strValue[iIndex];
  223. strDigit[1] = '\0';
  224. if (atoi(strDigit) > 0)
  225. {
  226. if (iIndexFlag0 == -1)
  227. {
  228. strcat(strVocNew, "0");
  229. strcat(strVocNew, ",");
  230. }
  231. iIndexFlag0 = iIndex;
  232. if (!(atoi(strDigit) == 1 && iIndex == 0))
  233. {
  234. strcat(strVocNew, strDigit);
  235. strcat(strVocNew, ",");
  236. }
  237. strcat(strVocNew, "shi");
  238. strcat(strVocNew, ",");
  239. }
  240. else
  241. {
  242. if (iIndexFlag0 >= 0)
  243. iIndexFlag0 = -1;
  244. }
  245. iIndex++;
  246. }
  247. if (atoi(strValue) >= 1000000000000)
  248. {
  249. strDigit[0] = strValue[iIndex];
  250. strDigit[1] = '\0';
  251. if (atoi(strDigit) > 0)
  252. {
  253. if (iIndexFlag0 == -1)
  254. {
  255. strcat(strVocNew, "0");
  256. strcat(strVocNew, ",");
  257. }
  258. iIndexFlag0 = iIndex;
  259. strcat(strVocNew, strDigit);
  260. strcat(strVocNew, ",");
  261. strcat(strVocNew, "wan");
  262. strcat(strVocNew, ",");
  263. }
  264. else
  265. {
  266. if (iIndexFlag0 >= 0)
  267. iIndexFlag0 = -1;
  268. strcat(strVocNew, "wan");
  269. strcat(strVocNew, ",");
  270. }
  271. iIndex++;
  272. }
  273. if (atoi(strValue) >= 100000000000)
  274. {
  275. strDigit[0] = strValue[iIndex];
  276. strDigit[1] = '\0';
  277. if (atoi(strDigit) > 0)
  278. {
  279. if (iIndexFlag0 == -1)
  280. {
  281. strcat(strVocNew, "0");
  282. strcat(strVocNew, ",");
  283. }
  284. iIndexFlag0 = iIndex;
  285. strcat(strVocNew, strDigit);
  286. strcat(strVocNew, ",");
  287. strcat(strVocNew, "qian");
  288. strcat(strVocNew, ",");
  289. }
  290. else
  291. {
  292. if (iIndexFlag0 >= 0)
  293. iIndexFlag0 = -1;
  294. }
  295. iIndex++;
  296. }
  297. if (atoi(strValue) >= 10000000000)
  298. {
  299. strDigit[0] = strValue[iIndex];
  300. strDigit[1] = '\0';
  301. if (atoi(strDigit) > 0)
  302. {
  303. if (iIndexFlag0 == -1)
  304. {
  305. strcat(strVocNew, "0");
  306. strcat(strVocNew, ",");
  307. }
  308. iIndexFlag0 = iIndex;
  309. strcat(strVocNew, strDigit);
  310. strcat(strVocNew, ",");
  311. strcat(strVocNew, "bai");
  312. strcat(strVocNew, ",");
  313. }
  314. else
  315. {
  316. if (iIndexFlag0 >= 0)
  317. iIndexFlag0 = -1;
  318. }
  319. iIndex++;
  320. }
  321. if (atoi(strValue) >= 1000000000)
  322. {
  323. strDigit[0] = strValue[iIndex];
  324. strDigit[1] = '\0';
  325. if (atoi(strDigit) > 0)
  326. {
  327. if (iIndexFlag0 == -1)
  328. {
  329. strcat(strVocNew, "0");
  330. strcat(strVocNew, ",");
  331. }
  332. iIndexFlag0 = iIndex;
  333. if (!(atoi(strDigit) == 1 && iIndex == 0))
  334. {
  335. strcat(strVocNew, strDigit);
  336. strcat(strVocNew, ",");
  337. }
  338. strcat(strVocNew, "shi");
  339. strcat(strVocNew, ",");
  340. }
  341. else
  342. {
  343. if (iIndexFlag0 >= 0)
  344. iIndexFlag0 = -1;
  345. }
  346. iIndex++;
  347. }
  348. if (atoi(strValue) >= 100000000)
  349. {
  350. strDigit[0] = strValue[iIndex];
  351. strDigit[1] = '\0';
  352. if (atoi(strDigit) > 0)
  353. {
  354. if (iIndexFlag0 == -1)
  355. {
  356. strcat(strVocNew, "0");
  357. strcat(strVocNew, ",");
  358. }
  359. iIndexFlag0 = iIndex;
  360. strcat(strVocNew, strDigit);
  361. strcat(strVocNew, ",");
  362. strcat(strVocNew, "yi");
  363. strcat(strVocNew, ",");
  364. }
  365. else
  366. {
  367. if (iIndexFlag0 >= 0)
  368. iIndexFlag0 = -1;
  369. strcat(strVocNew, "yi");
  370. strcat(strVocNew, ",");
  371. }
  372. iIndex++;
  373. }
  374. if (atoi(strValue) >= 10000000)
  375. {
  376. strDigit[0] = strValue[iIndex];
  377. strDigit[1] = '\0';
  378. if (atoi(strDigit) > 0)
  379. {
  380. if (iIndexFlag0 == -1)
  381. {
  382. strcat(strVocNew, "0");
  383. strcat(strVocNew, ",");
  384. }
  385. iIndexFlag0 = iIndex;
  386. strcat(strVocNew, strDigit);
  387. strcat(strVocNew, ",");
  388. strcat(strVocNew, "qian");
  389. strcat(strVocNew, ",");
  390. }
  391. else
  392. {
  393. if (iIndexFlag0 >= 0)
  394. iIndexFlag0 = -1;
  395. }
  396. iIndex++;
  397. }
  398. if (atoi(strValue) >= 1000000)
  399. {
  400. strDigit[0] = strValue[iIndex];
  401. strDigit[1] = '\0';
  402. if (atoi(strDigit) > 0)
  403. {
  404. if (iIndexFlag0 == -1)
  405. {
  406. strcat(strVocNew, "0");
  407. strcat(strVocNew, ",");
  408. }
  409. iIndexFlag0 = iIndex;
  410. strcat(strVocNew, strDigit);
  411. strcat(strVocNew, ",");
  412. strcat(strVocNew, "bai");
  413. strcat(strVocNew, ",");
  414. }
  415. else
  416. {
  417. if (iIndexFlag0 >= 0)
  418. iIndexFlag0 = -1;
  419. }
  420. iIndex++;
  421. }
  422. if (atoi(strValue) >= 100000)
  423. {
  424. strDigit[0] = strValue[iIndex];
  425. strDigit[1] = '\0';
  426. if (atoi(strDigit) > 0)
  427. {
  428. if (iIndexFlag0 == -1)
  429. {
  430. strcat(strVocNew, "0");
  431. strcat(strVocNew, ",");
  432. }
  433. iIndexFlag0 = iIndex;
  434. if (!(atoi(strDigit) == 1 && iIndex == 0))
  435. {
  436. strcat(strVocNew, strDigit);
  437. strcat(strVocNew, ",");
  438. }
  439. strcat(strVocNew, "shi");
  440. strcat(strVocNew, ",");
  441. }
  442. else
  443. {
  444. if (iIndexFlag0 >= 0)
  445. iIndexFlag0 = -1;
  446. }
  447. iIndex++;
  448. }
  449. if (atoi(strValue) >= 10000)
  450. {
  451. strDigit[0] = strValue[iIndex];
  452. strDigit[1] = '\0';
  453. if (atoi(strDigit) > 0)
  454. {
  455. if (iIndexFlag0 == -1)
  456. {
  457. strcat(strVocNew, "0");
  458. strcat(strVocNew, ",");
  459. }
  460. iIndexFlag0 = iIndex;
  461. strcat(strVocNew, strDigit);
  462. strcat(strVocNew, ",");
  463. strcat(strVocNew, "wan");
  464. strcat(strVocNew, ",");
  465. }
  466. else
  467. {
  468. if (iIndexFlag0 >= 0)
  469. iIndexFlag0 = -1;
  470. strcat(strVocNew, "wan");
  471. strcat(strVocNew, ",");
  472. }
  473. iIndex++;
  474. }
  475. if (atoi(strValue) >= 1000)
  476. {
  477. strDigit[0] = strValue[iIndex];
  478. strDigit[1] = '\0';
  479. if (atoi(strDigit) > 0)
  480. {
  481. if (iIndexFlag0 == -1)
  482. {
  483. strcat(strVocNew, "0");
  484. strcat(strVocNew, ",");
  485. }
  486. iIndexFlag0 = iIndex;
  487. strcat(strVocNew, strDigit);
  488. strcat(strVocNew, ",");
  489. strcat(strVocNew, "qian");
  490. strcat(strVocNew, ",");
  491. }
  492. else
  493. {
  494. if (iIndexFlag0 >= 0)
  495. iIndexFlag0 = -1;
  496. }
  497. iIndex++;
  498. }
  499. if (atoi(strValue) >= 100)
  500. {
  501. strDigit[0] = strValue[iIndex];
  502. strDigit[1] = '\0';
  503. if (atoi(strDigit) > 0)
  504. {
  505. if (iIndexFlag0 == -1)
  506. {
  507. strcat(strVocNew, "0");
  508. strcat(strVocNew, ",");
  509. }
  510. iIndexFlag0 = iIndex;
  511. strcat(strVocNew, strDigit);
  512. strcat(strVocNew, ",");
  513. strcat(strVocNew, "bai");
  514. strcat(strVocNew, ",");
  515. }
  516. else
  517. {
  518. if (iIndexFlag0 >= 0)
  519. iIndexFlag0 = -1;
  520. }
  521. iIndex++;
  522. }
  523. if (atoi(strValue) >= 10)
  524. {
  525. strDigit[0] = strValue[iIndex];
  526. strDigit[1] = '\0';
  527. if (atoi(strDigit) > 0)
  528. {
  529. if (iIndexFlag0 == -1)
  530. {
  531. strcat(strVocNew, "0");
  532. strcat(strVocNew, ",");
  533. }
  534. iIndexFlag0 = iIndex;
  535. if (!(atoi(strDigit) == 1 && iIndex == 0))
  536. {
  537. strcat(strVocNew, strDigit);
  538. strcat(strVocNew, ",");
  539. }
  540. strcat(strVocNew, "shi");
  541. strcat(strVocNew, ",");
  542. }
  543. else
  544. {
  545. if (iIndexFlag0 >= 0)
  546. iIndexFlag0 = -1;
  547. }
  548. iIndex++;
  549. }
  550. if (atoi(strValue) >= 0)
  551. {
  552. strDigit[0] = strValue[iIndex];
  553. strDigit[1] = '\0';
  554. if (atoi(strDigit) > 0)
  555. {
  556. if (iIndexFlag0 == -1)
  557. {
  558. strcat(strVocNew, "0");
  559. strcat(strVocNew, ",");
  560. }
  561. iIndexFlag0 = iIndex;
  562. strcat(strVocNew, strDigit);
  563. }
  564. else if (atoi(strDigit) == 0 && atoi(strValue) < 1)
  565. strcat(strVocNew, strDigit);
  566. iIndex++;
  567. }
  568. //小数
  569. memset(strValue, 0, sizeof(strValue));
  570. if (iPosition >= 0)
  571. {
  572. iRetCode = GetStringSpeak(strSour + iPosition, sizeof(strValue) - 1, strValue);
  573. if (iRetCode == 1)
  574. {
  575. strcat(strVocNew, ",");
  576. strcat(strVocNew, strValue);
  577. }
  578. }
  579. if ((size_t)iMaxLen >= strlen(strVocNew))
  580. {
  581. strcpy(strVoc, strVocNew);
  582. return 1;
  583. }
  584. else
  585. return 0;
  586. }
  587. int GetYuanSpeak(char *strSour, int iMaxLen, char *strVoc)
  588. {
  589. int iIndexSour = 0;
  590. int iLenSour = 0;
  591. int iIndex = 0;
  592. int iPosition = 0;
  593. int iLength = 0;
  594. int iRetCode = 0;
  595. char strDigit[MAX_DIGIT_LENGTH + 1] = "";
  596. char strValue[MAX_FILE_LENGTH + 1];
  597. char strVocNew[MAX_FILE_LENGTH * 10 + 1];
  598. int iIndexFlag0 = 0;
  599. if (strSour[strlen(strSour) - 1] == '.')
  600. strSour[strlen(strSour) - 1] = '\0';
  601. if (!IsAllDigit(strSour))
  602. return 0;
  603. if (atoi(strSour) >= 10000000000000000)
  604. return 0;
  605. iLenSour = strlen(strSour);
  606. //整数
  607. memset(strValue, 0, sizeof(strValue));
  608. iPosition = FindChar(strSour, 0, '.');
  609. if (iPosition > 0)
  610. {
  611. strncpy(strValue, strSour, iPosition);
  612. AllTrim(strValue);
  613. }
  614. else if (iPosition == 0)
  615. {
  616. strcpy(strValue, "0");
  617. strcat(strValue, strSour);
  618. }
  619. else
  620. {
  621. strcat(strValue, strSour);
  622. }
  623. sprintf(strVocNew, "%d", atoi(strValue));
  624. strcpy(strValue, strVocNew);
  625. strcpy(strVocNew, "");
  626. iIndex = 0;
  627. iIndexFlag0 = 0;
  628. iLength = strlen(strValue);
  629. if (atoi(strValue) >= 1000000000000000)
  630. {
  631. strDigit[0] = strValue[iIndex];
  632. strDigit[1] = '\0';
  633. if (atoi(strDigit) > 0)
  634. {
  635. if (iIndexFlag0 == -1)
  636. {
  637. strcat(strVocNew, "0");
  638. strcat(strVocNew, ",");
  639. }
  640. iIndexFlag0 = iIndex;
  641. strcat(strVocNew, strDigit);
  642. strcat(strVocNew, ",");
  643. strcat(strVocNew, "qian");
  644. strcat(strVocNew, ",");
  645. }
  646. else
  647. {
  648. if (iIndexFlag0 >= 0)
  649. iIndexFlag0 = -1;
  650. }
  651. iIndex++;
  652. }
  653. if (atoi(strValue) >= 100000000000000)
  654. {
  655. strDigit[0] = strValue[iIndex];
  656. strDigit[1] = '\0';
  657. if (atoi(strDigit) > 0)
  658. {
  659. if (iIndexFlag0 == -1)
  660. {
  661. strcat(strVocNew, "0");
  662. strcat(strVocNew, ",");
  663. }
  664. iIndexFlag0 = iIndex;
  665. strcat(strVocNew, strDigit);
  666. strcat(strVocNew, ",");
  667. strcat(strVocNew, "bai");
  668. strcat(strVocNew, ",");
  669. }
  670. else
  671. {
  672. if (iIndexFlag0 >= 0)
  673. iIndexFlag0 = -1;
  674. }
  675. iIndex++;
  676. }
  677. if (atoi(strValue) >= 10000000000000)
  678. {
  679. strDigit[0] = strValue[iIndex];
  680. strDigit[1] = '\0';
  681. if (atoi(strDigit) > 0)
  682. {
  683. if (iIndexFlag0 == -1)
  684. {
  685. strcat(strVocNew, "0");
  686. strcat(strVocNew, ",");
  687. }
  688. iIndexFlag0 = iIndex;
  689. if (!(atoi(strDigit) == 1 && iIndex == 0))
  690. {
  691. strcat(strVocNew, strDigit);
  692. strcat(strVocNew, ",");
  693. }
  694. strcat(strVocNew, "shi");
  695. strcat(strVocNew, ",");
  696. }
  697. else
  698. {
  699. if (iIndexFlag0 >= 0)
  700. iIndexFlag0 = -1;
  701. }
  702. iIndex++;
  703. }
  704. if (atoi(strValue) >= 1000000000000)
  705. {
  706. strDigit[0] = strValue[iIndex];
  707. strDigit[1] = '\0';
  708. if (atoi(strDigit) > 0)
  709. {
  710. if (iIndexFlag0 == -1)
  711. {
  712. strcat(strVocNew, "0");
  713. strcat(strVocNew, ",");
  714. }
  715. iIndexFlag0 = iIndex;
  716. strcat(strVocNew, strDigit);
  717. strcat(strVocNew, ",");
  718. strcat(strVocNew, "wan");
  719. strcat(strVocNew, ",");
  720. }
  721. else
  722. {
  723. if (iIndexFlag0 >= 0)
  724. iIndexFlag0 = -1;
  725. strcat(strVocNew, "wan");
  726. strcat(strVocNew, ",");
  727. }
  728. iIndex++;
  729. }
  730. if (atoi(strValue) >= 100000000000)
  731. {
  732. strDigit[0] = strValue[iIndex];
  733. strDigit[1] = '\0';
  734. if (atoi(strDigit) > 0)
  735. {
  736. if (iIndexFlag0 == -1)
  737. {
  738. strcat(strVocNew, "0");
  739. strcat(strVocNew, ",");
  740. }
  741. iIndexFlag0 = iIndex;
  742. strcat(strVocNew, strDigit);
  743. strcat(strVocNew, ",");
  744. strcat(strVocNew, "qian");
  745. strcat(strVocNew, ",");
  746. }
  747. else
  748. {
  749. if (iIndexFlag0 >= 0)
  750. iIndexFlag0 = -1;
  751. }
  752. iIndex++;
  753. }
  754. if (atoi(strValue) >= 10000000000)
  755. {
  756. strDigit[0] = strValue[iIndex];
  757. strDigit[1] = '\0';
  758. if (atoi(strDigit) > 0)
  759. {
  760. if (iIndexFlag0 == -1)
  761. {
  762. strcat(strVocNew, "0");
  763. strcat(strVocNew, ",");
  764. }
  765. iIndexFlag0 = iIndex;
  766. strcat(strVocNew, strDigit);
  767. strcat(strVocNew, ",");
  768. strcat(strVocNew, "bai");
  769. strcat(strVocNew, ",");
  770. }
  771. else
  772. {
  773. if (iIndexFlag0 >= 0)
  774. iIndexFlag0 = -1;
  775. }
  776. iIndex++;
  777. }
  778. if (atoi(strValue) >= 1000000000)
  779. {
  780. strDigit[0] = strValue[iIndex];
  781. strDigit[1] = '\0';
  782. if (atoi(strDigit) > 0)
  783. {
  784. if (iIndexFlag0 == -1)
  785. {
  786. strcat(strVocNew, "0");
  787. strcat(strVocNew, ",");
  788. }
  789. iIndexFlag0 = iIndex;
  790. if (!(atoi(strDigit) == 1 && iIndex == 0))
  791. {
  792. strcat(strVocNew, strDigit);
  793. strcat(strVocNew, ",");
  794. }
  795. strcat(strVocNew, "shi");
  796. strcat(strVocNew, ",");
  797. }
  798. else
  799. {
  800. if (iIndexFlag0 >= 0)
  801. iIndexFlag0 = -1;
  802. }
  803. iIndex++;
  804. }
  805. if (atoi(strValue) >= 100000000)
  806. {
  807. strDigit[0] = strValue[iIndex];
  808. strDigit[1] = '\0';
  809. if (atoi(strDigit) > 0)
  810. {
  811. if (iIndexFlag0 == -1)
  812. {
  813. strcat(strVocNew, "0");
  814. strcat(strVocNew, ",");
  815. }
  816. iIndexFlag0 = iIndex;
  817. strcat(strVocNew, strDigit);
  818. strcat(strVocNew, ",");
  819. strcat(strVocNew, "yi");
  820. strcat(strVocNew, ",");
  821. }
  822. else
  823. {
  824. if (iIndexFlag0 >= 0)
  825. iIndexFlag0 = -1;
  826. strcat(strVocNew, "yi");
  827. strcat(strVocNew, ",");
  828. }
  829. iIndex++;
  830. }
  831. if (atoi(strValue) >= 10000000)
  832. {
  833. strDigit[0] = strValue[iIndex];
  834. strDigit[1] = '\0';
  835. if (atoi(strDigit) > 0)
  836. {
  837. if (iIndexFlag0 == -1)
  838. {
  839. strcat(strVocNew, "0");
  840. strcat(strVocNew, ",");
  841. }
  842. iIndexFlag0 = iIndex;
  843. strcat(strVocNew, strDigit);
  844. strcat(strVocNew, ",");
  845. strcat(strVocNew, "qian");
  846. strcat(strVocNew, ",");
  847. }
  848. else
  849. {
  850. if (iIndexFlag0 >= 0)
  851. iIndexFlag0 = -1;
  852. }
  853. iIndex++;
  854. }
  855. if (atoi(strValue) >= 1000000)
  856. {
  857. strDigit[0] = strValue[iIndex];
  858. strDigit[1] = '\0';
  859. if (atoi(strDigit) > 0)
  860. {
  861. if (iIndexFlag0 == -1)
  862. {
  863. strcat(strVocNew, "0");
  864. strcat(strVocNew, ",");
  865. }
  866. iIndexFlag0 = iIndex;
  867. strcat(strVocNew, strDigit);
  868. strcat(strVocNew, ",");
  869. strcat(strVocNew, "bai");
  870. strcat(strVocNew, ",");
  871. }
  872. else
  873. {
  874. if (iIndexFlag0 >= 0)
  875. iIndexFlag0 = -1;
  876. }
  877. iIndex++;
  878. }
  879. if (atoi(strValue) >= 100000)
  880. {
  881. strDigit[0] = strValue[iIndex];
  882. strDigit[1] = '\0';
  883. if (atoi(strDigit) > 0)
  884. {
  885. if (iIndexFlag0 == -1)
  886. {
  887. strcat(strVocNew, "0");
  888. strcat(strVocNew, ",");
  889. }
  890. iIndexFlag0 = iIndex;
  891. if (!(atoi(strDigit) == 1 && iIndex == 0))
  892. {
  893. strcat(strVocNew, strDigit);
  894. strcat(strVocNew, ",");
  895. }
  896. strcat(strVocNew, "shi");
  897. strcat(strVocNew, ",");
  898. }
  899. else
  900. {
  901. if (iIndexFlag0 >= 0)
  902. iIndexFlag0 = -1;
  903. }
  904. iIndex++;
  905. }
  906. if (atoi(strValue) >= 10000)
  907. {
  908. strDigit[0] = strValue[iIndex];
  909. strDigit[1] = '\0';
  910. if (atoi(strDigit) > 0)
  911. {
  912. if (iIndexFlag0 == -1)
  913. {
  914. strcat(strVocNew, "0");
  915. strcat(strVocNew, ",");
  916. }
  917. iIndexFlag0 = iIndex;
  918. strcat(strVocNew, strDigit);
  919. strcat(strVocNew, ",");
  920. strcat(strVocNew, "wan");
  921. strcat(strVocNew, ",");
  922. }
  923. else
  924. {
  925. if (iIndexFlag0 >= 0)
  926. iIndexFlag0 = -1;
  927. strcat(strVocNew, "wan");
  928. strcat(strVocNew, ",");
  929. }
  930. iIndex++;
  931. }
  932. if (atoi(strValue) >= 1000)
  933. {
  934. strDigit[0] = strValue[iIndex];
  935. strDigit[1] = '\0';
  936. if (atoi(strDigit) > 0)
  937. {
  938. if (iIndexFlag0 == -1)
  939. {
  940. strcat(strVocNew, "0");
  941. strcat(strVocNew, ",");
  942. }
  943. iIndexFlag0 = iIndex;
  944. strcat(strVocNew, strDigit);
  945. strcat(strVocNew, ",");
  946. strcat(strVocNew, "qian");
  947. strcat(strVocNew, ",");
  948. }
  949. else
  950. {
  951. if (iIndexFlag0 >= 0)
  952. iIndexFlag0 = -1;
  953. }
  954. iIndex++;
  955. }
  956. if (atoi(strValue) >= 100)
  957. {
  958. strDigit[0] = strValue[iIndex];
  959. strDigit[1] = '\0';
  960. if (atoi(strDigit) > 0)
  961. {
  962. if (iIndexFlag0 == -1)
  963. {
  964. strcat(strVocNew, "0");
  965. strcat(strVocNew, ",");
  966. }
  967. iIndexFlag0 = iIndex;
  968. strcat(strVocNew, strDigit);
  969. strcat(strVocNew, ",");
  970. strcat(strVocNew, "bai");
  971. strcat(strVocNew, ",");
  972. }
  973. else
  974. {
  975. if (iIndexFlag0 >= 0)
  976. iIndexFlag0 = -1;
  977. }
  978. iIndex++;
  979. }
  980. if (atoi(strValue) >= 10)
  981. {
  982. strDigit[0] = strValue[iIndex];
  983. strDigit[1] = '\0';
  984. if (atoi(strDigit) > 0)
  985. {
  986. if (iIndexFlag0 == -1)
  987. {
  988. strcat(strVocNew, "0");
  989. strcat(strVocNew, ",");
  990. }
  991. iIndexFlag0 = iIndex;
  992. if (!(atoi(strDigit) == 1 && iIndex == 0))
  993. {
  994. strcat(strVocNew, strDigit);
  995. strcat(strVocNew, ",");
  996. }
  997. strcat(strVocNew, "shi");
  998. strcat(strVocNew, ",");
  999. }
  1000. else
  1001. {
  1002. if (iIndexFlag0 >= 0)
  1003. iIndexFlag0 = -1;
  1004. }
  1005. iIndex++;
  1006. }
  1007. if (atoi(strValue) >= 0)
  1008. {
  1009. strDigit[0] = strValue[iIndex];
  1010. strDigit[1] = '\0';
  1011. if (atoi(strDigit) > 0)
  1012. {
  1013. if (iIndexFlag0 == -1)
  1014. {
  1015. strcat(strVocNew, "0");
  1016. strcat(strVocNew, ",");
  1017. }
  1018. iIndexFlag0 = iIndex;
  1019. strcat(strVocNew, strDigit);
  1020. }
  1021. else if (atoi(strDigit) == 0 && atoi(strValue) < 1)
  1022. strcat(strVocNew, strDigit);
  1023. iIndex++;
  1024. }
  1025. //小数
  1026. memset(strValue, 0, sizeof(strValue));
  1027. if (iPosition >= 0)
  1028. {
  1029. memset(strDigit, 0, sizeof(strDigit));
  1030. memcpy(strDigit, strSour + iPosition, 3);
  1031. strDigit[3] = '\0';
  1032. if (strcmp(strDigit, ".00"))
  1033. {
  1034. iRetCode = GetStringSpeak(strDigit, sizeof(strValue) - 1, strValue);
  1035. if (iRetCode == 1)
  1036. {
  1037. strcat(strVocNew, ",");
  1038. strcat(strVocNew, strValue);
  1039. strcat(strVocNew, ",");
  1040. strcat(strVocNew, "yuan");
  1041. }
  1042. else
  1043. {
  1044. strcat(strVocNew, ",");
  1045. strcat(strVocNew, "yuan");
  1046. }
  1047. }
  1048. else
  1049. {
  1050. strcat(strVocNew, ",");
  1051. strcat(strVocNew, "yuan");
  1052. }
  1053. }
  1054. else
  1055. {
  1056. strcat(strVocNew, ",");
  1057. strcat(strVocNew, "yuan");
  1058. }
  1059. if ((size_t)iMaxLen >= strlen(strVocNew))
  1060. {
  1061. strcpy(strVoc, strVocNew);
  1062. return 1;
  1063. }
  1064. else
  1065. return 0;
  1066. }
  1067. int GetYuanSpeakEx(char *strSour, int iMaxLen, char *strVoc)
  1068. {
  1069. int iIndexSour = 0;
  1070. int iLenSour = 0;
  1071. int iIndex = 0;
  1072. int iPosition = 0;
  1073. int iLength = 0;
  1074. int iRetCode = 0;
  1075. char strDigit[MAX_DIGIT_LENGTH + 1] = "";
  1076. char strValue[MAX_FILE_LENGTH + 1];
  1077. char strVocNew[MAX_FILE_LENGTH * 10 + 1];
  1078. int iIndexFlag0 = 0;
  1079. if (strSour[strlen(strSour) - 1] == '.')
  1080. strSour[strlen(strSour) - 1] = '\0';
  1081. if (!IsAllDigit(strSour))
  1082. return 0;
  1083. if (atoi(strSour) >= 10000000000000000)
  1084. return 0;
  1085. iLenSour = strlen(strSour);
  1086. //整数
  1087. memset(strValue, 0, sizeof(strValue));
  1088. iPosition = FindChar(strSour, 0, '.');
  1089. if (iPosition > 0)
  1090. {
  1091. strncpy(strValue, strSour, iPosition);
  1092. AllTrim(strValue);
  1093. }
  1094. else if (iPosition == 0)
  1095. {
  1096. strcpy(strValue, "0");
  1097. strcat(strValue, strSour);
  1098. }
  1099. else
  1100. {
  1101. strcat(strValue, strSour);
  1102. }
  1103. sprintf(strVocNew, "%d", atoi(strValue));
  1104. strcpy(strValue, strVocNew);
  1105. strcpy(strVocNew, "");
  1106. iIndex = 0;
  1107. iIndexFlag0 = 0;
  1108. iLength = strlen(strValue);
  1109. if (atoi(strValue) >= 1000000000000000)
  1110. {
  1111. strDigit[0] = strValue[iIndex];
  1112. strDigit[1] = '\0';
  1113. if (atoi(strDigit) > 0)
  1114. {
  1115. if (iIndexFlag0 == -1)
  1116. {
  1117. strcat(strVocNew, g_strZero);
  1118. strcat(strVocNew, " ");
  1119. }
  1120. iIndexFlag0 = iIndex;
  1121. strcat(strVocNew, strDigitFileEx[atoi(strDigit)]);
  1122. strcat(strVocNew, " ");
  1123. strcat(strVocNew, g_strThousand);
  1124. strcat(strVocNew, " ");
  1125. }
  1126. else
  1127. {
  1128. if (iIndexFlag0 >= 0)
  1129. iIndexFlag0 = -1;
  1130. }
  1131. iIndex++;
  1132. }
  1133. if (atoi(strValue) >= 100000000000000)
  1134. {
  1135. strDigit[0] = strValue[iIndex];
  1136. strDigit[1] = '\0';
  1137. if (atoi(strDigit) > 0)
  1138. {
  1139. if (iIndexFlag0 == -1)
  1140. {
  1141. strcat(strVocNew, g_strZero);
  1142. strcat(strVocNew, " ");
  1143. }
  1144. iIndexFlag0 = iIndex;
  1145. strcat(strVocNew, strDigitFileEx[atoi(strDigit)]);
  1146. strcat(strVocNew, " ");
  1147. strcat(strVocNew, "bai");
  1148. strcat(strVocNew, " ");
  1149. }
  1150. else
  1151. {
  1152. if (iIndexFlag0 >= 0)
  1153. iIndexFlag0 = -1;
  1154. }
  1155. iIndex++;
  1156. }
  1157. if (atoi(strValue) >= 10000000000000)
  1158. {
  1159. strDigit[0] = strValue[iIndex];
  1160. strDigit[1] = '\0';
  1161. if (atoi(strDigit) > 0)
  1162. {
  1163. if (iIndexFlag0 == -1)
  1164. {
  1165. strcat(strVocNew, g_strZero);
  1166. strcat(strVocNew, " ");
  1167. }
  1168. iIndexFlag0 = iIndex;
  1169. if (!(atoi(strDigit) == 1 && iIndex == 0))
  1170. {
  1171. strcat(strVocNew, strDigitFileEx[atoi(strDigit)]);
  1172. strcat(strVocNew, " ");
  1173. }
  1174. strcat(strVocNew, g_strTen);
  1175. strcat(strVocNew, " ");
  1176. }
  1177. else
  1178. {
  1179. if (iIndexFlag0 >= 0)
  1180. iIndexFlag0 = -1;
  1181. }
  1182. iIndex++;
  1183. }
  1184. if (atoi(strValue) >= 1000000000000)
  1185. {
  1186. strDigit[0] = strValue[iIndex];
  1187. strDigit[1] = '\0';
  1188. if (atoi(strDigit) > 0)
  1189. {
  1190. if (iIndexFlag0 == -1)
  1191. {
  1192. strcat(strVocNew, g_strZero);
  1193. strcat(strVocNew, " ");
  1194. }
  1195. iIndexFlag0 = iIndex;
  1196. strcat(strVocNew, strDigitFileEx[atoi(strDigit)]);
  1197. strcat(strVocNew, " ");
  1198. strcat(strVocNew, g_strWan);
  1199. strcat(strVocNew, " ");
  1200. }
  1201. else
  1202. {
  1203. if (iIndexFlag0 >= 0)
  1204. iIndexFlag0 = -1;
  1205. strcat(strVocNew, g_strWan);
  1206. strcat(strVocNew, " ");
  1207. }
  1208. iIndex++;
  1209. }
  1210. if (atoi(strValue) >= 100000000000)
  1211. {
  1212. strDigit[0] = strValue[iIndex];
  1213. strDigit[1] = '\0';
  1214. if (atoi(strDigit) > 0)
  1215. {
  1216. if (iIndexFlag0 == -1)
  1217. {
  1218. strcat(strVocNew, g_strZero);
  1219. strcat(strVocNew, " ");
  1220. }
  1221. iIndexFlag0 = iIndex;
  1222. strcat(strVocNew, strDigitFileEx[atoi(strDigit)]);
  1223. strcat(strVocNew, " ");
  1224. strcat(strVocNew, g_strThousand);
  1225. strcat(strVocNew, " ");
  1226. }
  1227. else
  1228. {
  1229. if (iIndexFlag0 >= 0)
  1230. iIndexFlag0 = -1;
  1231. }
  1232. iIndex++;
  1233. }
  1234. if (atoi(strValue) >= 10000000000)
  1235. {
  1236. strDigit[0] = strValue[iIndex];
  1237. strDigit[1] = '\0';
  1238. if (atoi(strDigit) > 0)
  1239. {
  1240. if (iIndexFlag0 == -1)
  1241. {
  1242. strcat(strVocNew, g_strZero);
  1243. strcat(strVocNew, " ");
  1244. }
  1245. iIndexFlag0 = iIndex;
  1246. strcat(strVocNew, strDigitFileEx[atoi(strDigit)]);
  1247. strcat(strVocNew, " ");
  1248. strcat(strVocNew, g_strHandred);
  1249. strcat(strVocNew, " ");
  1250. }
  1251. else
  1252. {
  1253. if (iIndexFlag0 >= 0)
  1254. iIndexFlag0 = -1;
  1255. }
  1256. iIndex++;
  1257. }
  1258. if (atoi(strValue) >= 1000000000)
  1259. {
  1260. strDigit[0] = strValue[iIndex];
  1261. strDigit[1] = '\0';
  1262. if (atoi(strDigit) > 0)
  1263. {
  1264. if (iIndexFlag0 == -1)
  1265. {
  1266. strcat(strVocNew, g_strZero);
  1267. strcat(strVocNew, " ");
  1268. }
  1269. iIndexFlag0 = iIndex;
  1270. if (!(atoi(strDigit) == 1 && iIndex == 0))
  1271. {
  1272. strcat(strVocNew, strDigitFileEx[atoi(strDigit)]);
  1273. strcat(strVocNew, " ");
  1274. }
  1275. strcat(strVocNew, g_strTen);
  1276. strcat(strVocNew, " ");
  1277. }
  1278. else
  1279. {
  1280. if (iIndexFlag0 >= 0)
  1281. iIndexFlag0 = -1;
  1282. }
  1283. iIndex++;
  1284. }
  1285. if (atoi(strValue) >= 100000000)
  1286. {
  1287. strDigit[0] = strValue[iIndex];
  1288. strDigit[1] = '\0';
  1289. if (atoi(strDigit) > 0)
  1290. {
  1291. if (iIndexFlag0 == -1)
  1292. {
  1293. strcat(strVocNew, g_strZero);
  1294. strcat(strVocNew, " ");
  1295. }
  1296. iIndexFlag0 = iIndex;
  1297. strcat(strVocNew, strDigitFileEx[atoi(strDigit)]);
  1298. strcat(strVocNew, " ");
  1299. strcat(strVocNew, g_strBilion);
  1300. strcat(strVocNew, " ");
  1301. }
  1302. else
  1303. {
  1304. if (iIndexFlag0 >= 0)
  1305. iIndexFlag0 = -1;
  1306. strcat(strVocNew, g_strBilion);
  1307. strcat(strVocNew, " ");
  1308. }
  1309. iIndex++;
  1310. }
  1311. if (atoi(strValue) >= 10000000)
  1312. {
  1313. strDigit[0] = strValue[iIndex];
  1314. strDigit[1] = '\0';
  1315. if (atoi(strDigit) > 0)
  1316. {
  1317. if (iIndexFlag0 == -1)
  1318. {
  1319. strcat(strVocNew, g_strZero);
  1320. strcat(strVocNew, " ");
  1321. }
  1322. iIndexFlag0 = iIndex;
  1323. strcat(strVocNew, strDigitFileEx[atoi(strDigit)]);
  1324. strcat(strVocNew, " ");
  1325. strcat(strVocNew, g_strThousand);
  1326. strcat(strVocNew, " ");
  1327. }
  1328. else
  1329. {
  1330. if (iIndexFlag0 >= 0)
  1331. iIndexFlag0 = -1;
  1332. }
  1333. iIndex++;
  1334. }
  1335. if (atoi(strValue) >= 1000000)
  1336. {
  1337. strDigit[0] = strValue[iIndex];
  1338. strDigit[1] = '\0';
  1339. if (atoi(strDigit) > 0)
  1340. {
  1341. if (iIndexFlag0 == -1)
  1342. {
  1343. strcat(strVocNew, g_strZero);
  1344. strcat(strVocNew, " ");
  1345. }
  1346. iIndexFlag0 = iIndex;
  1347. strcat(strVocNew, strDigitFileEx[atoi(strDigit)]);
  1348. strcat(strVocNew, " ");
  1349. strcat(strVocNew, g_strHandred);
  1350. strcat(strVocNew, " ");
  1351. }
  1352. else
  1353. {
  1354. if (iIndexFlag0 >= 0)
  1355. iIndexFlag0 = -1;
  1356. }
  1357. iIndex++;
  1358. }
  1359. if (atoi(strValue) >= 100000)
  1360. {
  1361. strDigit[0] = strValue[iIndex];
  1362. strDigit[1] = '\0';
  1363. if (atoi(strDigit) > 0)
  1364. {
  1365. if (iIndexFlag0 == -1)
  1366. {
  1367. strcat(strVocNew, g_strZero);
  1368. strcat(strVocNew, " ");
  1369. }
  1370. iIndexFlag0 = iIndex;
  1371. if (!(atoi(strDigit) == 1 && iIndex == 0))
  1372. {
  1373. strcat(strVocNew, strDigitFileEx[atoi(strDigit)]);
  1374. strcat(strVocNew, " ");
  1375. }
  1376. strcat(strVocNew, g_strTen);
  1377. strcat(strVocNew, " ");
  1378. }
  1379. else
  1380. {
  1381. if (iIndexFlag0 >= 0)
  1382. iIndexFlag0 = -1;
  1383. }
  1384. iIndex++;
  1385. }
  1386. if (atoi(strValue) >= 10000)
  1387. {
  1388. strDigit[0] = strValue[iIndex];
  1389. strDigit[1] = '\0';
  1390. if (atoi(strDigit) > 0)
  1391. {
  1392. if (iIndexFlag0 == -1)
  1393. {
  1394. strcat(strVocNew, g_strZero);
  1395. strcat(strVocNew, " ");
  1396. }
  1397. iIndexFlag0 = iIndex;
  1398. strcat(strVocNew, strDigitFileEx[atoi(strDigit)]);
  1399. strcat(strVocNew, " ");
  1400. strcat(strVocNew, g_strWan);
  1401. strcat(strVocNew, " ");
  1402. }
  1403. else
  1404. {
  1405. if (iIndexFlag0 >= 0)
  1406. iIndexFlag0 = -1;
  1407. strcat(strVocNew, g_strWan);
  1408. strcat(strVocNew, " ");
  1409. }
  1410. iIndex++;
  1411. }
  1412. if (atoi(strValue) >= 1000)
  1413. {
  1414. strDigit[0] = strValue[iIndex];
  1415. strDigit[1] = '\0';
  1416. if (atoi(strDigit) > 0)
  1417. {
  1418. if (iIndexFlag0 == -1)
  1419. {
  1420. strcat(strVocNew, g_strZero);
  1421. strcat(strVocNew, " ");
  1422. }
  1423. iIndexFlag0 = iIndex;
  1424. strcat(strVocNew, strDigitFileEx[atoi(strDigit)]);
  1425. strcat(strVocNew, " ");
  1426. strcat(strVocNew, g_strThousand);
  1427. strcat(strVocNew, " ");
  1428. }
  1429. else
  1430. {
  1431. if (iIndexFlag0 >= 0)
  1432. iIndexFlag0 = -1;
  1433. }
  1434. iIndex++;
  1435. }
  1436. if (atoi(strValue) >= 100)
  1437. {
  1438. strDigit[0] = strValue[iIndex];
  1439. strDigit[1] = '\0';
  1440. if (atoi(strDigit) > 0)
  1441. {
  1442. if (iIndexFlag0 == -1)
  1443. {
  1444. strcat(strVocNew, g_strZero);
  1445. strcat(strVocNew, " ");
  1446. }
  1447. iIndexFlag0 = iIndex;
  1448. strcat(strVocNew, strDigitFileEx[atoi(strDigit)]);
  1449. strcat(strVocNew, " ");
  1450. strcat(strVocNew, g_strHandred);
  1451. strcat(strVocNew, " ");
  1452. }
  1453. else
  1454. {
  1455. if (iIndexFlag0 >= 0)
  1456. iIndexFlag0 = -1;
  1457. }
  1458. iIndex++;
  1459. }
  1460. if (atoi(strValue) >= 10)
  1461. {
  1462. strDigit[0] = strValue[iIndex];
  1463. strDigit[1] = '\0';
  1464. if (atoi(strDigit) > 0)
  1465. {
  1466. if (iIndexFlag0 == -1)
  1467. {
  1468. strcat(strVocNew, g_strZero);
  1469. strcat(strVocNew, " ");
  1470. }
  1471. iIndexFlag0 = iIndex;
  1472. if (!(atoi(strDigit) == 1 && iIndex == 0))
  1473. {
  1474. strcat(strVocNew, strDigitFileEx[atoi(strDigit)]);
  1475. strcat(strVocNew, " ");
  1476. }
  1477. strcat(strVocNew, g_strTen);
  1478. strcat(strVocNew, " ");
  1479. }
  1480. else
  1481. {
  1482. if (iIndexFlag0 >= 0)
  1483. iIndexFlag0 = -1;
  1484. }
  1485. iIndex++;
  1486. }
  1487. if (atoi(strValue) >= 0)
  1488. {
  1489. strDigit[0] = strValue[iIndex];
  1490. strDigit[1] = '\0';
  1491. if (atoi(strDigit) > 0)
  1492. {
  1493. if (iIndexFlag0 == -1)
  1494. {
  1495. strcat(strVocNew, g_strZero);
  1496. strcat(strVocNew, " ");
  1497. }
  1498. iIndexFlag0 = iIndex;
  1499. strcat(strVocNew, strDigitFileEx[atoi(strDigit)]);
  1500. }
  1501. else if (atoi(strDigit) == 0 && atoi(strValue) < 1)
  1502. strcat(strVocNew, strDigitFileEx[atoi(strDigit)]);
  1503. iIndex++;
  1504. }
  1505. //小数
  1506. memset(strValue, 0, sizeof(strValue));
  1507. if (iPosition >= 0)
  1508. {
  1509. memset(strValue, 0, sizeof(strValue));
  1510. memcpy(strValue, strSour + iPosition, 3);
  1511. strValue[3] = '\0';
  1512. if (atoi(strValue + 1) > 0)
  1513. {
  1514. strcat(strVocNew, g_strYuan1);
  1515. strDigit[0] = strValue[1];
  1516. strDigit[1] = '\0';
  1517. if (atoi(strDigit) > 0)
  1518. {
  1519. strcat(strVocNew, strDigitFileEx[atoi(strDigit)]);
  1520. strcat(strVocNew, " ");
  1521. strcat(strVocNew, g_strCent);
  1522. if (atoi(strValue + 2) > 0)
  1523. strcat(strVocNew, " ");
  1524. }
  1525. if (atoi(strValue + 2) > 0)
  1526. {
  1527. if (atoi(strDigit) == 0)
  1528. {
  1529. strcat(strVocNew, g_strZero);
  1530. strcat(strVocNew, " ");
  1531. }
  1532. strcat(strVocNew, strDigitFileEx[atoi(strValue + 2)]);
  1533. strcat(strVocNew, " ");
  1534. strcat(strVocNew, g_strMinute);
  1535. }
  1536. }
  1537. else
  1538. {
  1539. strcat(strVocNew, " ");
  1540. strcat(strVocNew, g_strYuan2);
  1541. }
  1542. }
  1543. else
  1544. {
  1545. strcat(strVocNew, " ");
  1546. strcat(strVocNew, g_strYuan2);
  1547. }
  1548. if ((size_t)iMaxLen >= strlen(strVocNew))
  1549. {
  1550. strcpy(strVoc, strVocNew);
  1551. return 1;
  1552. }
  1553. else
  1554. return 0;
  1555. }
  1556. int GetMonthSpeak(char *strSour, int iMaxLen, char *strVoc)
  1557. {
  1558. int iRetCode = 0;
  1559. char strVocNew[MAX_FILE_LENGTH + 1] = "";
  1560. if (!IsAllDigit(strSour))
  1561. return 0;
  1562. if (atoi(strSour) > 12 || atoi(strSour) <= 0)
  1563. return 0;
  1564. sprintf(strVocNew, "Month%02d", atoi(strSour));
  1565. if ((size_t)iMaxLen >= strlen(strVocNew))
  1566. {
  1567. strcpy(strVoc, strVocNew);
  1568. return 1;
  1569. }
  1570. else
  1571. return 0;
  1572. }
  1573. int GetDaySpeak(char *strSour, int iMaxLen, char *strVoc)
  1574. {
  1575. int iRetCode = 0;
  1576. char strVocNew[MAX_FILE_LENGTH + 1] = "";
  1577. if (!IsAllDigit(strSour))
  1578. return 0;
  1579. if (atoi(strSour) >= 60 || atoi(strSour) < 0)
  1580. return 0;
  1581. sprintf(strVocNew, "Day%02d", atoi(strSour));
  1582. if ((size_t)iMaxLen >= strlen(strVocNew))
  1583. {
  1584. strcpy(strVoc, strVocNew);
  1585. return 1;
  1586. }
  1587. else
  1588. return 0;
  1589. }
  1590. int GetHourSpeak(char *strSour, int iMaxLen, char *strVoc)
  1591. {
  1592. int iRetCode = 0;
  1593. char strVocNew[MAX_FILE_LENGTH + 1] = "";
  1594. if (!IsAllDigit(strSour))
  1595. return 0;
  1596. if (atoi(strSour) >= 60 || atoi(strSour) < 0)
  1597. return 0;
  1598. sprintf(strVocNew, "Hour%02d", atoi(strSour));
  1599. if ((size_t)iMaxLen >= strlen(strVocNew))
  1600. {
  1601. strcpy(strVoc, strVocNew);
  1602. return 1;
  1603. }
  1604. else
  1605. return 0;
  1606. }
  1607. int GetMinuteSpeak(char *strSour, int iMaxLen, char *strVoc)
  1608. {
  1609. int iRetCode = 0;
  1610. char strVocNew[MAX_FILE_LENGTH + 1] = "";
  1611. if (!IsAllDigit(strSour))
  1612. return 0;
  1613. if (atoi(strSour) >= 60 || atoi(strSour) < 0)
  1614. return 0;
  1615. sprintf(strVocNew, "Minute%02d", atoi(strSour));
  1616. if ((size_t)iMaxLen >= strlen(strVocNew))
  1617. {
  1618. strcpy(strVoc, strVocNew);
  1619. return 1;
  1620. }
  1621. else
  1622. return 0;
  1623. }
  1624. int GetSecondSpeak(char *strSour, int iMaxLen, char *strVoc)
  1625. {
  1626. int iRetCode = 0;
  1627. char strVocNew[MAX_FILE_LENGTH + 1] = "";
  1628. if (!IsAllDigit(strSour))
  1629. return 0;
  1630. if (atoi(strSour) >= 60 || atoi(strSour) < 0)
  1631. return 0;
  1632. sprintf(strVocNew, "Second%02d", atoi(strSour));
  1633. if ((size_t)iMaxLen >= strlen(strVocNew))
  1634. {
  1635. strcpy(strVoc, strVocNew);
  1636. return 1;
  1637. }
  1638. else
  1639. return 0;
  1640. }
  1641. int IsAllDigit(char *strSour)
  1642. {
  1643. char *strDest = strSour;
  1644. while (*strDest)
  1645. {
  1646. if (!isdigit(*strDest) && *strDest != '.')
  1647. return 0;
  1648. else
  1649. strDest++;
  1650. }
  1651. return 1;
  1652. }
  1653. int SplitFileName(CHAR *strFileFull)
  1654. {
  1655. int iIndex = 0;
  1656. int iIndexLast = -1;
  1657. int iLength = 0;
  1658. CHAR strFileName[MAX_FILE_LENGTH + 1] = "";
  1659. iLength = strlen(strFileFull);
  1660. while (iIndex < iLength)
  1661. {
  1662. if (strFileFull[iIndex] == '\\')
  1663. iIndexLast = iIndex;
  1664. iIndex++;
  1665. }
  1666. if (iIndexLast > -1)
  1667. strcpy(strFileName, strFileFull + iIndexLast + 1);
  1668. else
  1669. strcpy(strFileName, strFileFull);
  1670. AllTrim(strFileName);
  1671. strcpy(strFileFull, strFileName);
  1672. return iIndexLast;
  1673. }
  1674. int SplitStr(CHAR *strSource, CHAR cChar, int iItem, CHAR *strGet)
  1675. {
  1676. int iIndex = 0;
  1677. int iIndexThis = -1;
  1678. int iIndexNext = -1;
  1679. int iLength = 0;
  1680. int iItemThis = 0;
  1681. CHAR strFileName[MAX_FILE_LENGTH + 1] = "";
  1682. iLength = strlen(strSource);
  1683. while (iIndex < iLength)
  1684. {
  1685. if (strSource[iIndex] == cChar)
  1686. {
  1687. iItemThis++;
  1688. if (iItemThis == iItem)
  1689. iIndexThis = iIndex;
  1690. else if (iItemThis == iItem + 1)
  1691. {
  1692. iIndexNext = iIndex;
  1693. break;
  1694. }
  1695. }
  1696. iIndex++;
  1697. }
  1698. if (iIndexNext > 0 && iIndexNext > iIndexThis)
  1699. {
  1700. memcpy(strGet, strSource + iIndexThis + 1, iIndexNext - iIndexThis - 1);
  1701. strGet[iIndexNext - iIndexThis - 1] = '\0';
  1702. }
  1703. else
  1704. strcpy(strGet, "");
  1705. return 0;
  1706. }
  1707. int SplitSubStr(CHAR *strSource, INT iPos, INT iLength, CHAR *strGet)
  1708. {
  1709. int iLen = 0;
  1710. CHAR strFileName[MAX_FILE_LENGTH + 1] = "";
  1711. if (strSource != NULL && strGet != NULL && iPos >= 0 && iLength > 0 &&
  1712. strlen(strSource) > 0 && strlen(strSource) >= (size_t)(iPos + iLength))
  1713. {
  1714. memcpy(strGet, strSource + iPos, iLength);
  1715. strGet[iLength] = '\0';
  1716. return 1;
  1717. }
  1718. return 0;
  1719. }