www.pudn.com > dialogic_IVR.rar > Ctool.cpp
#include#include "Ctool.h" void ValueTrans( char * numstr ) { int i,j,zero,len,locat; char str[21]=""; char *ptr, c; BOOL bIsFu = FALSE; i=j=zero=len=locat=0; if( numstr[0] == '-' ) { bIsFu = TRUE; strcpy( numstr, &numstr[1] ); } len=strlen(numstr); for( i=0; i =1) { zero+=(len-i); if ( zero>8 ) numstr[j++]='y'; else { if ( zero>4 && zero!=8) numstr[j++]='w'; } if( zero != 5 ) { numstr[j++]='0'; } zero=0; } numstr[j++]=str[i]; if(len-i>1) { switch ( len-i ) { case 2: case 6: case 10: c='s';break; //拾 case 7: case 3: c='b';break; //百 case 8: case 4: c='q';break; //千 case 5: c='w';break; //万 case 9: c='y';break; //亿 } numstr[j++]=c; } } else zero++; } if ( zero>4 ) { if ( zero>8 ) numstr[j++]='y'; else numstr[j++]='w'; } if(locat>0) { if (str[locat+1]!='0' || str[locat+2]!='0') { numstr[j++]=str[locat++]; numstr[j++]=str[locat++]; numstr[j++]=str[locat]; } } numstr[j]=0x0; if( bIsFu ) { strcpy( str, numstr ); strcpy( numstr, "-" ); strcat( numstr, str ); } if( !strlen(numstr) ) strcpy( numstr, "0" ); } /******************************************************************** * 将日期转为其语音串 *********************************************************************/ void DateTrans( char * date ) { int len, j = 4; char tempstr[9] = ""; strcpy( tempstr, date ); len = strlen( tempstr ); strncpy( date, tempstr, 4 ); date[j++] = 'N'; //年 if ( tempstr[4] != '0' ) { date[j++]='s'; if ( tempstr[5] != '0' ) date[j++]=tempstr[5]; } else date[j++] = tempstr[5]; date[j++] = 'Y'; //月 if ( tempstr[6]!='0' ) { if ( tempstr[6]>'1' ) date[j++] = tempstr[6]; date[j++]='s'; if ( tempstr[7]!='0' ) date[j++] = tempstr[7]; } else date[j++] = tempstr[7]; date[j++] = 'R'; //日 date[j] = 0x0; } /******************************************************************** * 将时间转为其语音串 *********************************************************************/ void TimeTrans( char * time ) { int len, j = 0; char tempstr[7] = ""; strcpy( tempstr, time ); len = strlen( tempstr ); switch( tempstr[0] ) { case '0': break; case '1': time[j++] = 's'; break; case '2': time[j++] = tempstr[0]; time[j++] = 's'; break; default: break; } time[j++] = tempstr[1]; if ( tempstr[1]=='0' && tempstr[0]!='0' ) j--; time[j++] = '.'; switch( tempstr[2] ) { case '0': break; default: time[j++] = tempstr[2]; time[j++] = 's'; break; } time[j++] = tempstr[3]; if ( tempstr[3]=='0' && tempstr[2]!='0' ) j--; time[j++] = 'F'; time[j ]= 0x0; } //****************************************************************** /******************************************************************** * 将数值转化为百分数语音串 *********************************************************************/ void PercentTrans( char * m_value ) { char tempstr[21] = ""; double value = atof( m_value ) * 100 ; sprintf( tempstr, "%g", value ); strcpy( m_value, "%" ); strcat( m_value, tempstr ); } //****************************************************************** int AbstractData(char *szData, int nIndex, char *szOut, char cSeperatorChar) { /****************************** 前提:szData是由cSeperatorChar分隔开的字符串. 注意:szData若只有一个域,也需要在结尾加分隔符. nIndex: 由1开始的索引 szOut: (out)输出的字符串,需要事先分配空间 返回: -1 出错 0 成功找到, 但可能为空 1 没找到 ******************************/ int nPosition; char *szTemp, *szTemp2; char *szTempSave; szTemp = (char *)malloc(strlen(szData) + 1); strcpy(szTemp, szData); szTempSave = szTemp; szOut[0] = 0; szTemp2 = (char *)malloc(strlen(szData) + 1); char szSeperator[2] = "\0"; szSeperator[0] = cSeperatorChar; char *p1; //忽略第nIndex个成员之前的数据 for(int i = 0; i < nIndex - 1; i ++) { p1 = strstr(szTemp, szSeperator); if(p1 == NULL) { free(szTempSave); free(szTemp2); return(1); } else { nPosition = p1 - szTemp; szTemp += nPosition + 1; } } //寻找第nIndex个成员后面的分隔符 p1 = strstr(szTemp, szSeperator); if(p1 == NULL) {//第nIndex个成员没有以分隔符结尾 strcpy(szOut, szTemp); } else {//找到第nIndex个成员后面的分隔符 memcpy(szOut, szTemp, p1 - szTemp); szOut[p1 - szTemp] = 0; } free(szTempSave); free(szTemp2); return(0); }