⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ctool.cpp

📁 基于dialogic语音卡的IVR系统源代码
💻 CPP
字号:
#include <afx.h>
#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<len; i++ )
	{
		if( numstr[i] == '*' ) numstr[i] = '.';
		if( numstr[i] == '#' ) numstr[i] = 0x0;
	}
	
	ptr=strchr(numstr,'.');
	if (ptr)
		len=locat=ptr-numstr;
	else
		len=strlen(numstr);
	strcpy( str,numstr );
	
	for (i=0;i<len;i++)          //整数部分
	{
		if (str[i]!='0')
		{
			if (zero>=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);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -