#include "stdafx.h" #include "memory.h" #include "string.h" #include "malloc.h" #include "ctype.h" #include "Const.h" #include "StringOperation.h" char strDigitFile[16][5] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "shi", "bai", "qian", "wan", "yi", "dian"}; char strDigitFileEx[16][5] = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "shi", "bai", "qian", "wan", "yi", "dian"}; void RTrim(char *strSour) { int iLen = 0; char *strDest = NULL; iLen = strlen(strSour); strDest = strSour + iLen - 1; if (strcmp(strSour, "") == 0) return; if (Spaces(strSour)) { *strSour = '\0'; return; } while ((*strDest == 0x20)||(*strDest == 0x0D)||(*strDest == 0x0A)||(*strDest == 0x09)) strDest--; *(++strDest) = '\0'; } void LTrim(char *strSour) { int iIndex = 0; int iLen = 0; char *strTmp = NULL; if (strcmp(strSour, "") == 0) return; iLen = strlen(strSour); if (Spaces(strSour)) { *strSour='\0'; return; } strTmp = strSour; for (iIndex = 0; *strTmp && ((*strTmp == 0x20)||(*strTmp == 0x0A)||(*strTmp == 0x0d)||(*strTmp == 0x09)); strTmp++, iIndex++); memmove(strSour, strTmp, iLen); } int Spaces(char *strSour) { char *strDest = strSour; while (*strDest) { if (*strDest == ' ') strDest++; else return 0; } return 1; } void AllTrim(char *strSour) { if (strcmp(strSour, "") == 0) return; RTrim(strSour); LTrim(strSour); } void InsertChar(char *strSour, int iPos, char cChar) { char *strDest = NULL; strDest = _strdup(strSour + iPos); memcpy(strSour + iPos + 1, strDest, strlen(strDest)); strSour[iPos] = cChar; free(strDest); } int FindChar(char *strSour, int iPos, char cChar) { char *strDest = NULL; unsigned int iIndex = 0; strDest = strSour + iPos; for ( iIndex = 0; iIndex < strlen(strDest); iIndex++) { if (*(strDest + iIndex) == cChar) break; } if (iIndex >= strlen(strDest)) { return -1; } return (strDest + iIndex- strSour); } int DeleteChar(char *strSour, int iPos, int iCount) { char *strDest = NULL; strDest = strSour + iPos + iCount; if ((iPos + iCount) > (int)strlen(strSour)) return -1; memmove(strSour + iPos, strDest, strlen(strSour)); return 0; } int GetStringSpeak(char *strSour, int iMaxLen, char *strVoc) { int iIndexSour = 0; int iLenSour = 0; char strDigit[2] = ""; iLenSour = strlen(strSour); if (iMaxLen < iLenSour * 2) return 0; strcpy(strVoc, ""); for (iIndexSour = 0; iIndexSour < iLenSour; iIndexSour++) { strDigit[0] = strSour[iIndexSour]; strDigit[1] = '\0'; if (strDigit[0] == '.') { strcat(strVoc, "Dian"); if (iIndexSour != iLenSour - 1) strcat(strVoc, ","); } else { strcat(strVoc, strDigit); if (iIndexSour != iLenSour - 1) strcat(strVoc, ","); } } return 1; } int GetDigitSpeak(char *strSour, int iMaxLen, char *strVoc) { int iIndexSour = 0; int iLenSour = 0; int iIndex = 0; int iPosition = 0; int iLength = 0; int iRetCode = 0; char strDigit[MAX_DIGIT_LENGTH + 1] = ""; char strValue[MAX_FILE_LENGTH + 1]; char strVocNew[MAX_FILE_LENGTH * 10 + 1]; int iIndexFlag0 = 0; if (strSour[strlen(strSour) - 1] == '.') strSour[strlen(strSour) - 1] = '\0'; if (!IsAllDigit(strSour)) return 0; if (atoi(strSour) >= 10000000000000000) return 0; iLenSour = strlen(strSour); //整数 memset(strValue, 0, sizeof(strValue)); iPosition = FindChar(strSour, 0, '.'); if (iPosition > 0) { strncpy(strValue, strSour, iPosition); AllTrim(strValue); } else if (iPosition == 0) { strcpy(strValue, "0"); strcat(strValue, strSour); } else { strcat(strValue, strSour); } sprintf(strVocNew, "%d", atoi(strValue)); strcpy(strValue, strVocNew); strcpy(strVocNew, ""); iIndex = 0; iIndexFlag0 = 0; iLength = strlen(strValue); if (atoi(strValue) >= 1000000000000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigit); strcat(strVocNew, ","); strcat(strVocNew, "qian"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 100000000000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigit); strcat(strVocNew, ","); strcat(strVocNew, "bai"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 10000000000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; if (!(atoi(strDigit) == 1 && iIndex == 0)) { strcat(strVocNew, strDigit); strcat(strVocNew, ","); } strcat(strVocNew, "shi"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 1000000000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigit); strcat(strVocNew, ","); strcat(strVocNew, "wan"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; strcat(strVocNew, "wan"); strcat(strVocNew, ","); } iIndex++; } if (atoi(strValue) >= 100000000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigit); strcat(strVocNew, ","); strcat(strVocNew, "qian"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 10000000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigit); strcat(strVocNew, ","); strcat(strVocNew, "bai"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 1000000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; if (!(atoi(strDigit) == 1 && iIndex == 0)) { strcat(strVocNew, strDigit); strcat(strVocNew, ","); } strcat(strVocNew, "shi"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 100000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigit); strcat(strVocNew, ","); strcat(strVocNew, "yi"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; strcat(strVocNew, "yi"); strcat(strVocNew, ","); } iIndex++; } if (atoi(strValue) >= 10000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigit); strcat(strVocNew, ","); strcat(strVocNew, "qian"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 1000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigit); strcat(strVocNew, ","); strcat(strVocNew, "bai"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 100000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; if (!(atoi(strDigit) == 1 && iIndex == 0)) { strcat(strVocNew, strDigit); strcat(strVocNew, ","); } strcat(strVocNew, "shi"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 10000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigit); strcat(strVocNew, ","); strcat(strVocNew, "wan"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; strcat(strVocNew, "wan"); strcat(strVocNew, ","); } iIndex++; } if (atoi(strValue) >= 1000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigit); strcat(strVocNew, ","); strcat(strVocNew, "qian"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 100) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigit); strcat(strVocNew, ","); strcat(strVocNew, "bai"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 10) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; if (!(atoi(strDigit) == 1 && iIndex == 0)) { strcat(strVocNew, strDigit); strcat(strVocNew, ","); } strcat(strVocNew, "shi"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 0) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigit); } else if (atoi(strDigit) == 0 && atoi(strValue) < 1) strcat(strVocNew, strDigit); iIndex++; } //小数 memset(strValue, 0, sizeof(strValue)); if (iPosition >= 0) { iRetCode = GetStringSpeak(strSour + iPosition, sizeof(strValue) - 1, strValue); if (iRetCode == 1) { strcat(strVocNew, ","); strcat(strVocNew, strValue); } } if ((size_t)iMaxLen >= strlen(strVocNew)) { strcpy(strVoc, strVocNew); return 1; } else return 0; } int GetYuanSpeak(char *strSour, int iMaxLen, char *strVoc) { int iIndexSour = 0; int iLenSour = 0; int iIndex = 0; int iPosition = 0; int iLength = 0; int iRetCode = 0; char strDigit[MAX_DIGIT_LENGTH + 1] = ""; char strValue[MAX_FILE_LENGTH + 1]; char strVocNew[MAX_FILE_LENGTH * 10 + 1]; int iIndexFlag0 = 0; if (strSour[strlen(strSour) - 1] == '.') strSour[strlen(strSour) - 1] = '\0'; if (!IsAllDigit(strSour)) return 0; if (atoi(strSour) >= 10000000000000000) return 0; iLenSour = strlen(strSour); //整数 memset(strValue, 0, sizeof(strValue)); iPosition = FindChar(strSour, 0, '.'); if (iPosition > 0) { strncpy(strValue, strSour, iPosition); AllTrim(strValue); } else if (iPosition == 0) { strcpy(strValue, "0"); strcat(strValue, strSour); } else { strcat(strValue, strSour); } sprintf(strVocNew, "%d", atoi(strValue)); strcpy(strValue, strVocNew); strcpy(strVocNew, ""); iIndex = 0; iIndexFlag0 = 0; iLength = strlen(strValue); if (atoi(strValue) >= 1000000000000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigit); strcat(strVocNew, ","); strcat(strVocNew, "qian"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 100000000000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigit); strcat(strVocNew, ","); strcat(strVocNew, "bai"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 10000000000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; if (!(atoi(strDigit) == 1 && iIndex == 0)) { strcat(strVocNew, strDigit); strcat(strVocNew, ","); } strcat(strVocNew, "shi"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 1000000000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigit); strcat(strVocNew, ","); strcat(strVocNew, "wan"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; strcat(strVocNew, "wan"); strcat(strVocNew, ","); } iIndex++; } if (atoi(strValue) >= 100000000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigit); strcat(strVocNew, ","); strcat(strVocNew, "qian"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 10000000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigit); strcat(strVocNew, ","); strcat(strVocNew, "bai"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 1000000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; if (!(atoi(strDigit) == 1 && iIndex == 0)) { strcat(strVocNew, strDigit); strcat(strVocNew, ","); } strcat(strVocNew, "shi"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 100000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigit); strcat(strVocNew, ","); strcat(strVocNew, "yi"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; strcat(strVocNew, "yi"); strcat(strVocNew, ","); } iIndex++; } if (atoi(strValue) >= 10000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigit); strcat(strVocNew, ","); strcat(strVocNew, "qian"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 1000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigit); strcat(strVocNew, ","); strcat(strVocNew, "bai"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 100000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; if (!(atoi(strDigit) == 1 && iIndex == 0)) { strcat(strVocNew, strDigit); strcat(strVocNew, ","); } strcat(strVocNew, "shi"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 10000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigit); strcat(strVocNew, ","); strcat(strVocNew, "wan"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; strcat(strVocNew, "wan"); strcat(strVocNew, ","); } iIndex++; } if (atoi(strValue) >= 1000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigit); strcat(strVocNew, ","); strcat(strVocNew, "qian"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 100) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigit); strcat(strVocNew, ","); strcat(strVocNew, "bai"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 10) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; if (!(atoi(strDigit) == 1 && iIndex == 0)) { strcat(strVocNew, strDigit); strcat(strVocNew, ","); } strcat(strVocNew, "shi"); strcat(strVocNew, ","); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 0) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, "0"); strcat(strVocNew, ","); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigit); } else if (atoi(strDigit) == 0 && atoi(strValue) < 1) strcat(strVocNew, strDigit); iIndex++; } //小数 memset(strValue, 0, sizeof(strValue)); if (iPosition >= 0) { memset(strDigit, 0, sizeof(strDigit)); memcpy(strDigit, strSour + iPosition, 3); strDigit[3] = '\0'; if (strcmp(strDigit, ".00")) { iRetCode = GetStringSpeak(strDigit, sizeof(strValue) - 1, strValue); if (iRetCode == 1) { strcat(strVocNew, ","); strcat(strVocNew, strValue); strcat(strVocNew, ","); strcat(strVocNew, "yuan"); } else { strcat(strVocNew, ","); strcat(strVocNew, "yuan"); } } else { strcat(strVocNew, ","); strcat(strVocNew, "yuan"); } } else { strcat(strVocNew, ","); strcat(strVocNew, "yuan"); } if ((size_t)iMaxLen >= strlen(strVocNew)) { strcpy(strVoc, strVocNew); return 1; } else return 0; } int GetYuanSpeakEx(char *strSour, int iMaxLen, char *strVoc) { int iIndexSour = 0; int iLenSour = 0; int iIndex = 0; int iPosition = 0; int iLength = 0; int iRetCode = 0; char strDigit[MAX_DIGIT_LENGTH + 1] = ""; char strValue[MAX_FILE_LENGTH + 1]; char strVocNew[MAX_FILE_LENGTH * 10 + 1]; int iIndexFlag0 = 0; if (strSour[strlen(strSour) - 1] == '.') strSour[strlen(strSour) - 1] = '\0'; if (!IsAllDigit(strSour)) return 0; if (atoi(strSour) >= 10000000000000000) return 0; iLenSour = strlen(strSour); //整数 memset(strValue, 0, sizeof(strValue)); iPosition = FindChar(strSour, 0, '.'); if (iPosition > 0) { strncpy(strValue, strSour, iPosition); AllTrim(strValue); } else if (iPosition == 0) { strcpy(strValue, "0"); strcat(strValue, strSour); } else { strcat(strValue, strSour); } sprintf(strVocNew, "%d", atoi(strValue)); strcpy(strValue, strVocNew); strcpy(strVocNew, ""); iIndex = 0; iIndexFlag0 = 0; iLength = strlen(strValue); if (atoi(strValue) >= 1000000000000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, g_strZero); strcat(strVocNew, " "); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigitFileEx[atoi(strDigit)]); strcat(strVocNew, " "); strcat(strVocNew, g_strThousand); strcat(strVocNew, " "); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 100000000000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, g_strZero); strcat(strVocNew, " "); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigitFileEx[atoi(strDigit)]); strcat(strVocNew, " "); strcat(strVocNew, "bai"); strcat(strVocNew, " "); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 10000000000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, g_strZero); strcat(strVocNew, " "); } iIndexFlag0 = iIndex; if (!(atoi(strDigit) == 1 && iIndex == 0)) { strcat(strVocNew, strDigitFileEx[atoi(strDigit)]); strcat(strVocNew, " "); } strcat(strVocNew, g_strTen); strcat(strVocNew, " "); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 1000000000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, g_strZero); strcat(strVocNew, " "); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigitFileEx[atoi(strDigit)]); strcat(strVocNew, " "); strcat(strVocNew, g_strWan); strcat(strVocNew, " "); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; strcat(strVocNew, g_strWan); strcat(strVocNew, " "); } iIndex++; } if (atoi(strValue) >= 100000000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, g_strZero); strcat(strVocNew, " "); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigitFileEx[atoi(strDigit)]); strcat(strVocNew, " "); strcat(strVocNew, g_strThousand); strcat(strVocNew, " "); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 10000000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, g_strZero); strcat(strVocNew, " "); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigitFileEx[atoi(strDigit)]); strcat(strVocNew, " "); strcat(strVocNew, g_strHandred); strcat(strVocNew, " "); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 1000000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, g_strZero); strcat(strVocNew, " "); } iIndexFlag0 = iIndex; if (!(atoi(strDigit) == 1 && iIndex == 0)) { strcat(strVocNew, strDigitFileEx[atoi(strDigit)]); strcat(strVocNew, " "); } strcat(strVocNew, g_strTen); strcat(strVocNew, " "); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 100000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, g_strZero); strcat(strVocNew, " "); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigitFileEx[atoi(strDigit)]); strcat(strVocNew, " "); strcat(strVocNew, g_strBilion); strcat(strVocNew, " "); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; strcat(strVocNew, g_strBilion); strcat(strVocNew, " "); } iIndex++; } if (atoi(strValue) >= 10000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, g_strZero); strcat(strVocNew, " "); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigitFileEx[atoi(strDigit)]); strcat(strVocNew, " "); strcat(strVocNew, g_strThousand); strcat(strVocNew, " "); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 1000000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, g_strZero); strcat(strVocNew, " "); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigitFileEx[atoi(strDigit)]); strcat(strVocNew, " "); strcat(strVocNew, g_strHandred); strcat(strVocNew, " "); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 100000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, g_strZero); strcat(strVocNew, " "); } iIndexFlag0 = iIndex; if (!(atoi(strDigit) == 1 && iIndex == 0)) { strcat(strVocNew, strDigitFileEx[atoi(strDigit)]); strcat(strVocNew, " "); } strcat(strVocNew, g_strTen); strcat(strVocNew, " "); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 10000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, g_strZero); strcat(strVocNew, " "); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigitFileEx[atoi(strDigit)]); strcat(strVocNew, " "); strcat(strVocNew, g_strWan); strcat(strVocNew, " "); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; strcat(strVocNew, g_strWan); strcat(strVocNew, " "); } iIndex++; } if (atoi(strValue) >= 1000) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, g_strZero); strcat(strVocNew, " "); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigitFileEx[atoi(strDigit)]); strcat(strVocNew, " "); strcat(strVocNew, g_strThousand); strcat(strVocNew, " "); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 100) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, g_strZero); strcat(strVocNew, " "); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigitFileEx[atoi(strDigit)]); strcat(strVocNew, " "); strcat(strVocNew, g_strHandred); strcat(strVocNew, " "); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 10) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, g_strZero); strcat(strVocNew, " "); } iIndexFlag0 = iIndex; if (!(atoi(strDigit) == 1 && iIndex == 0)) { strcat(strVocNew, strDigitFileEx[atoi(strDigit)]); strcat(strVocNew, " "); } strcat(strVocNew, g_strTen); strcat(strVocNew, " "); } else { if (iIndexFlag0 >= 0) iIndexFlag0 = -1; } iIndex++; } if (atoi(strValue) >= 0) { strDigit[0] = strValue[iIndex]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { if (iIndexFlag0 == -1) { strcat(strVocNew, g_strZero); strcat(strVocNew, " "); } iIndexFlag0 = iIndex; strcat(strVocNew, strDigitFileEx[atoi(strDigit)]); } else if (atoi(strDigit) == 0 && atoi(strValue) < 1) strcat(strVocNew, strDigitFileEx[atoi(strDigit)]); iIndex++; } //小数 memset(strValue, 0, sizeof(strValue)); if (iPosition >= 0) { memset(strValue, 0, sizeof(strValue)); memcpy(strValue, strSour + iPosition, 3); strValue[3] = '\0'; if (atoi(strValue + 1) > 0) { strcat(strVocNew, g_strYuan1); strDigit[0] = strValue[1]; strDigit[1] = '\0'; if (atoi(strDigit) > 0) { strcat(strVocNew, strDigitFileEx[atoi(strDigit)]); strcat(strVocNew, " "); strcat(strVocNew, g_strCent); if (atoi(strValue + 2) > 0) strcat(strVocNew, " "); } if (atoi(strValue + 2) > 0) { if (atoi(strDigit) == 0) { strcat(strVocNew, g_strZero); strcat(strVocNew, " "); } strcat(strVocNew, strDigitFileEx[atoi(strValue + 2)]); strcat(strVocNew, " "); strcat(strVocNew, g_strMinute); } } else { strcat(strVocNew, " "); strcat(strVocNew, g_strYuan2); } } else { strcat(strVocNew, " "); strcat(strVocNew, g_strYuan2); } if ((size_t)iMaxLen >= strlen(strVocNew)) { strcpy(strVoc, strVocNew); return 1; } else return 0; } int GetMonthSpeak(char *strSour, int iMaxLen, char *strVoc) { int iRetCode = 0; char strVocNew[MAX_FILE_LENGTH + 1] = ""; if (!IsAllDigit(strSour)) return 0; if (atoi(strSour) > 12 || atoi(strSour) <= 0) return 0; sprintf(strVocNew, "Month%02d", atoi(strSour)); if ((size_t)iMaxLen >= strlen(strVocNew)) { strcpy(strVoc, strVocNew); return 1; } else return 0; } int GetDaySpeak(char *strSour, int iMaxLen, char *strVoc) { int iRetCode = 0; char strVocNew[MAX_FILE_LENGTH + 1] = ""; if (!IsAllDigit(strSour)) return 0; if (atoi(strSour) >= 60 || atoi(strSour) < 0) return 0; sprintf(strVocNew, "Day%02d", atoi(strSour)); if ((size_t)iMaxLen >= strlen(strVocNew)) { strcpy(strVoc, strVocNew); return 1; } else return 0; } int GetHourSpeak(char *strSour, int iMaxLen, char *strVoc) { int iRetCode = 0; char strVocNew[MAX_FILE_LENGTH + 1] = ""; if (!IsAllDigit(strSour)) return 0; if (atoi(strSour) >= 60 || atoi(strSour) < 0) return 0; sprintf(strVocNew, "Hour%02d", atoi(strSour)); if ((size_t)iMaxLen >= strlen(strVocNew)) { strcpy(strVoc, strVocNew); return 1; } else return 0; } int GetMinuteSpeak(char *strSour, int iMaxLen, char *strVoc) { int iRetCode = 0; char strVocNew[MAX_FILE_LENGTH + 1] = ""; if (!IsAllDigit(strSour)) return 0; if (atoi(strSour) >= 60 || atoi(strSour) < 0) return 0; sprintf(strVocNew, "Minute%02d", atoi(strSour)); if ((size_t)iMaxLen >= strlen(strVocNew)) { strcpy(strVoc, strVocNew); return 1; } else return 0; } int GetSecondSpeak(char *strSour, int iMaxLen, char *strVoc) { int iRetCode = 0; char strVocNew[MAX_FILE_LENGTH + 1] = ""; if (!IsAllDigit(strSour)) return 0; if (atoi(strSour) >= 60 || atoi(strSour) < 0) return 0; sprintf(strVocNew, "Second%02d", atoi(strSour)); if ((size_t)iMaxLen >= strlen(strVocNew)) { strcpy(strVoc, strVocNew); return 1; } else return 0; } int IsAllDigit(char *strSour) { char *strDest = strSour; while (*strDest) { if (!isdigit(*strDest) && *strDest != '.') return 0; else strDest++; } return 1; } int SplitFileName(CHAR *strFileFull) { int iIndex = 0; int iIndexLast = -1; int iLength = 0; CHAR strFileName[MAX_FILE_LENGTH + 1] = ""; iLength = strlen(strFileFull); while (iIndex < iLength) { if (strFileFull[iIndex] == '\\') iIndexLast = iIndex; iIndex++; } if (iIndexLast > -1) strcpy(strFileName, strFileFull + iIndexLast + 1); else strcpy(strFileName, strFileFull); AllTrim(strFileName); strcpy(strFileFull, strFileName); return iIndexLast; } int SplitStr(CHAR *strSource, CHAR cChar, int iItem, CHAR *strGet) { int iIndex = 0; int iIndexThis = -1; int iIndexNext = -1; int iLength = 0; int iItemThis = 0; CHAR strFileName[MAX_FILE_LENGTH + 1] = ""; iLength = strlen(strSource); while (iIndex < iLength) { if (strSource[iIndex] == cChar) { iItemThis++; if (iItemThis == iItem) iIndexThis = iIndex; else if (iItemThis == iItem + 1) { iIndexNext = iIndex; break; } } iIndex++; } if (iIndexNext > 0 && iIndexNext > iIndexThis) { memcpy(strGet, strSource + iIndexThis + 1, iIndexNext - iIndexThis - 1); strGet[iIndexNext - iIndexThis - 1] = '\0'; } else strcpy(strGet, ""); return 0; } int SplitSubStr(CHAR *strSource, INT iPos, INT iLength, CHAR *strGet) { int iLen = 0; CHAR strFileName[MAX_FILE_LENGTH + 1] = ""; if (strSource != NULL && strGet != NULL && iPos >= 0 && iLength > 0 && strlen(strSource) > 0 && strlen(strSource) >= (size_t)(iPos + iLength)) { memcpy(strGet, strSource + iPos, iLength); strGet[iLength] = '\0'; return 1; } return 0; }