#include "stdio.h"
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <atlbase.h>
#include <sapi.h>
#include <stdlib.h>
#include <sphelper.h>
#pragma comment(lib, "sapi.lib")
char * replaceAll(char * src,char oldChar,char newChar){
char * head=src;
while(*src!='\0'){
if(*src==oldChar) *src=newChar;
src++;
}
return head;
}
CComPtr<ISpVoice> pVoice;
HRESULT hr;
int InitVoice()
{
CComPtr<IEnumSpObjectTokens> pEnum;
CComPtr<ISpObjectToken> pVoiceToken;
int i;
::CoInitialize(NULL);
if(FAILED(hr=SpEnumTokens(SPCAT_VOICES,L"Language=804",NULL,&pEnum)))
return 0;
for(i=0;i<1;i++)
{
pVoiceToken.Release();
pEnum->Next(1, &pVoiceToken, NULL);
}
if(FAILED(hr=pVoice.CoCreateInstance(CLSID_SpVoice)))
return 0;
if(FAILED(hr = pVoice->SetVoice(pVoiceToken)))
return 0;
return 1;
}
void ReleaseVoice()
{
pVoice.Release();
CoUninitialize();
}
void Speak(char *Txt)
{
CSpDynamicString s(Txt);
pVoice->Speak(s,0,0);
}
void intnumber()
{
long i,j,k,x,y,n1,n2,an,ip[3],z,asc1;
char c,d[100],h[100],g[100],o[4]={"除"},q[100];
InitVoice();
printf("请输入运算式");
gets(d);
char * p=d;
for(x=1;x<100;x++)
if(d[x]=='+')
{ Speak(d);
p=replaceAll(d,'+',' ');
n1=atoi(d);
for(z=0;z<100;z++)
if(d[z]==' ')
{
for(y=0;y<z;y++)
d[y]=' ';
}
n2=atoi(d);
{if(d[0]=='-')
an=(-1)*n1+n2;
else
an=n1+n2;}
sprintf(h,"%ld",an);
printf("%ld",an);
Speak(h);
}
else if(d[x]=='-')
{
Speak(d);
p=replaceAll(d,'-',' ');
n1=atoi(d);
for(z=0;z<100;z++)
if(d[z]==' ')
{
for(y=0;y<z;y++)
d[y]=' ';
}
n2=atoi(d);
{if(d[0]=='-')
an=(-1)*n1-n2;
else
an=n1-n2;}
sprintf(h,"%ld",an);
printf("%ld",an);
Speak(h);
}
else if(d[x]=='*')
{
Speak(d);
p=replaceAll(d,'*',' ');
n1=atoi(d);
for(z=0;z<100;z++)
if(d[z]==' ')
{
for(y=0;y<z;y++)
d[y]=' ';
}
n2=atoi(d);
an=n1*n2;
sprintf(h,"%ld",an);
printf("%ld",an);
Speak(h);
}
else if(d[x]=='/')
{
strcpy(g,d);
for(i=0,j=0;i<100,j<100;)
if(g[i]=='/')
{
q[j++]=g[i+1];
g[i]='\0';
}
strcat(g,o);
strcat(g,q);
Speak(g);
p=replaceAll(d,'/',' ');
n1=atoi(d);
for(z=0;z<100;z++)
if(d[z]==' ')
{
for(y=0;y<z;y++)
d[y]=' ';
}
n2=atoi(d);
{if(d[0]=='-')
an=(-1)*n1/n2;
else
an=n1/n2;}
sprintf(h,"%ld",an);
printf("%ld",an);
Speak(h);
}
;
ReleaseVoice();
}
void del(){ int x,y,z;
float i,j,k,n1,n2,an,ip[3];
char c,d[100],h[100],g[100],o[4]={"除"},q[100];
InitVoice();
printf("请输入运算式");
gets(d);
char * p=d;
for(x=1;x<100;x++)
if(d[x]=='+')
{ Speak(d);
p=replaceAll(d,'+',' ');
n1=atof(d);
for(z=0;z<100;z++)
if(d[z]==' ')
{
for(y=0;y<z;y++)
d[y]=' ';
}
n2=atof(d);
{if(d[0]=='-')
an=(-1)*n1+n2;
else
an=n1+n2;}
sprintf(h,"%.3f",an);
printf("%.3f",an);
Speak(h);
}
else if(d[x]=='-')
{
Speak(d);
p=replaceAll(d,'-',' ');
n1=atof(d);
for(z=0;z<100;z++)
if(d[z]==' ')
{
for(y=0;y<z;y++)
d[y]=' ';
}
n2=atof(d);
{if(d[0]=='-')
an=(-1)*n1-n2;
else
an=n1-n2;}
sprintf(h,"%.3f",an);
printf("%.3f",an);
Speak(h);
}
else if(d[x]=='*')
{
Speak(d);
p=replaceAll(d,'*',' ');
n1=atof(d);
for(z=0;z<100;z++)
if(d[z]==' ')
{
for(y=0;y<z;y++)
d[y]=' ';
}
n2=atof(d);
an=n1*n2;
sprintf(h,"%.3f",an);
printf("%.3f",an);
Speak(h);
}
else if(d[x]=='/')
{
Speak(g);
p=replaceAll(d,'/',' ');
n1=atof(d);
for(z=0;z<100;z++)
if(d[z]==' ')
{
for(y=0;y<z;y++)
d[y]=' ';
}
n2=atof(d);
{if(d[0]=='-')
an=(-1)*n1/n2;
else
an=n1/n2;}
sprintf(h,"%.3f",an);
printf("%.3f",an);
Speak(h);
}
;
ReleaseVoice();}
void find(){}
void sort(){}void main()
{
char ch;
{
printf("****************************************\n");
printf(" 1: 整数的运算 \n");
printf(" 2: 浮点数的运算 \n");
printf(" 3: 复数的运算 \n");
printf(" 4: 退出 \n");
printf(" \n");
printf(" \n");
printf("请选择输入选项[1\\2\\3\\4]:>\n");
printf("****************************************\n");
while(ch=getch())
{
switch(ch)
{
case '1': intnumber(); break;
case '2': del(); break;
case '3': find(); break;
case '4': exit(0);
}
}
}while(1);
}