这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzzcxy/SE |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzzcxy/SE/homework/10283 |
这个作业的目标 | 中文语言编译器 |
作业正文 | 如下 |
其他参考文献 | 无 |
ithub仓库地址:https://github.com/ARIES-7/FIRST
代码行数:205行
作业所需数字转换:
-汉转数:
int change(char x[]){
if(strcmp(x,"零") == 0)
return 0;
if(strcmp(x,"一") == 0)
return 1;
if(strcmp(x,"二") == 0)
return 2;
if(strcmp(x,"三") == 0)
return 3;
... (同上)
}
-数转汉:
void change2(int a){
int x,y;
if(a == 0)
printf("零"); //特殊情况
if(a%10 == 0)
{
switch(a/10){
case 1:
printf("十");break;
case 2:
printf("二十");break;
case 3:
printf("三十");break;
...
}
}
else{
x=a/10;
y=a%10;
switch(x){
case 1:
printf("十");break;
case 2:
printf("二十");break;
case 3:
printf("三十");break;
case 4:
printf("四十");break;
...
}
switch(y){
case 1:
printf("一");break;
case 2:
printf("二");break;
case 3:
printf("三");break;
case 4:
printf("四");break;
... (同)
}
}
}
此处数字汉字转换还未考虑到上百
遇到提取引号内文字:
void tq(char y[]){
char s[100];
int i=0,n=0;
while(y[i]!='"' && y[i]!='\0' )
i++;
while(1){
i++;
if(y[i]!='"')
s[n++]=y[i];
else
break;
}
s[n++]='\0';
printf("%s\n",s);
}
主函数实现:
while(scanf("%s",&y1)){ //先输入一个字符串,进行判断 案例共有四种可能
if(strcmp(y1,"整数") == 0){ //读入数据
if(flag == 0){
scanf("%s %s %s",&x1,&x3,&x4);
a+=change(x4);
flag=1;
}
else{
scanf("%s %s %s",&x2,&x3,&x4);
b+=change(x4);
}
}
else if(strcmp(y1,"看看") == 0){ //打印数据
scanf("%s",&y2);
if(strcmp(y2,x1) == 0){
change2(a);
printf("\n");
}
if(strcmp(y2,x2) == 0){
change2(b);
printf("\n");
}
}
else if(strcmp(y1,"如果") == 0){ //特殊处理
scanf(...);
if(strcmp(z5,"看看") == 0)
if(strcmp(z1,x1) == 0){
if(a>change(z3)) tq(z6);
else tq(z9);
}
else{
if(b>change(z3)) tq(z6);
else tq(z9);
}
else{
if(strcmp(z1,x1) == 0){
if(a>change(z3))
if(strcmp(z6,"增加") == 0)
if(strcmp(z5,x1) == 0) a+=change(y3);
else b+=change(y3);
else if(strcmp(z6,"减少") == 0)
if(strcmp(z5,x1) == 0) a-=change(y3);
else b-=change(y3);
else
if(strcmp(z9,"无") == 0) break;
}
else{
if(b>change(z3))
(重复) 同上增减
}
}
}
else{ //数据处理
scanf("%s %s",&y2,&y3);
if(strcmp(y2,"增加") == 0){
if(strcmp(y1,x1) == 0)
a+=change(y3);
else
b+=change(y3);
}
else if(strcmp(y2,"减少") == 0){
if(strcmp(y1,x1) == 0)
a-=change(y3);
else
b-=change(y3);
}
}
}
return 0;
}
作业中的问题:
本次代码只能实现部分固定句式的测试,若是增加或句式改变,仍然存在问题。