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

📄 numtran.cpp

📁 计算机英汉机器翻译系统中的英语词性标注方法实现
💻 CPP
字号:

#include "stdafx.h"
#include "stdio.h"
#include "ctype.h"
#include "string.h"

long	EachWordValue[20];

unsigned long NumTran(int left,int right)
{
	unsigned long	result=0;
	int		i, j;

	if(left==right)
		return	EachWordValue[left];
	for(j=left;j<=right;j++)
	   if(EachWordValue[j]>=10)
	   	break;
	if(j>right)
		{
		for(i=left;i<=right;i++)
			result= 10*result+EachWordValue[i];
		return	result;                   	//five nine zero four
		}
	if(left==right-1)
		return  (EachWordValue[left] < EachWordValue[right])?
			EachWordValue[left]*EachWordValue[right]:(EachWordValue[left]+EachWordValue[right]);  //teenty one, two hundred
	j=right;
	while(EachWordValue[j]<100)	//
		j--;
	if(j<right)
		return	(NumTran(left,j) + NumTran(j+1,right));	//four thousand six five four
	
	i=right-1;
	while( i>left &&  (EachWordValue[i]<=9 ||
		EachWordValue[right] > EachWordValue[i]))
		//(EachWordValue[right]-(EachWordValue[right]/EachWordValue[i])*EachWordValue[i])==0))
		i--;
	if(i==left)
		return	(NumTran(left,right-1)*EachWordValue[right]);		//124万
	else
		return	(NumTran(left,i)+NumTran(i+1,right-1)*EachWordValue[right] );
								//3千2百1十
}

long	OuterNumTran(char * sen)
{
	char	word[20],*ptrhead,*ptrtail;
	int		i,con=1,wordno=0;
	#define	MaxBitNo 32
	char	Bit[MaxBitNo][10]={"zero","one","two","three","four",
		"five","six","seven","eight",
		"nine","ten","eleven","twelve","thirteen",
		"fourteen","fifteen", "sixteen","seventeen",
		"eighteen","ninteen","twenty","thirty",
		"fourty","fifty","sixty","seventy",
		"eighty","ninty","hundred","thousand","million"};
	long	BitValue[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,
		17,18,19,20,30,40,50,60,70,80,90,100,1000,1000000};
	//translate each word in sen into corresponding value	
	ptrtail =  sen;
	while(con)
		{
		ptrhead = strchr(ptrtail,' ');
		if(ptrhead!=NULL)
			{
			strncpy(word,ptrtail,ptrhead-ptrtail);
			word[ptrhead-ptrtail]='\0';
			}
		else
			{
			strcpy(word,ptrtail);
			con=0;
			}
		for(i=0;i<MaxBitNo;i++)
			{
			if(strcmp(word,Bit[i])==0)
				{
				EachWordValue[wordno] = BitValue[i];
				break;
				}
			}
		if(i==MaxBitNo)	//erro
			return	-1;
		wordno++;
		ptrtail = ++ptrhead;
		}	
	//translate each word in sen into corresponding value
	return	NumTran(0,wordno-1);
}

⌨️ 快捷键说明

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