编程题

编程题

题目的要求是编写一个程序,输入满足以下语法要求的一段文字,输出运行后的结果。
输入:
整数 钱包 等于 零
钱包 增加 四
钱包 减少 三
看看 钱包
输出:

如上,需要我们和平常不一样的用中文输入和输出,因此我需要能把中文转化成数字和把数字转化成中文,还要能识别一些关键字,进行相应的运算。
我忽略了整数、钱包,看看这些词语。
查阅资料发现一个汉字占两个字节,然后我用char数组里连续的两个变量来储存一个汉字,数组的最后加上\0;
只用了简单的循环来控制12个字符串输入结束;
用strcmp来比较输入的汉字是否与“增加”,“减少”,“等于”的其中一个相同,进行对应的处理;
然后把输入的数字分成三类:一个,两个,或三个汉字组成,编写了三个函数分别处理它们,返回对应的阿拉伯数字,进行加、减或赋值运算;
最后把得到的阿拉伯数字用另一个函数转化成汉字并直接输出。
因为太菜并且时间也有限(其实是自己一直拖),并没有到考虑输入不规范的情况...所以符合这些条件代码才能用:一定要有十二个用空格或换行符间隔开的字符串,字符串的长度不超过四个汉字,存在“增加”,“减少”,“等于”和零到一百的数字(不包括一百)的关键字,赋值,加减后的结果也不能超过100,并且数字要紧跟在“增加”,“减少”,“等于”后面。如果没有进行赋值,也默认初始为0。

运行结果(截图高糊就不放了):

整数 钱包 等于 零
钱包 增加 三
钱包 减少 三
看看 钱包

整数 钱包 等于 一
钱包 增加 三十五
钱包 减少 二十二
看看 钱包
十四

整数 口袋 等于 零
口袋 增加 三
口袋 减少 二
康康 口袋

全部代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
char zero[] = "零",
one[] = "一",
two[] = "二",
three[] = "三",
four[] = "四",
five[] = "五",
six[] = "六",
seven[] = "七",
eight[] = "八",
nine[] = "九",
ten[] = "十";
void output(int i);
int Cn_translator(char* s);
int Cn_translator1(char* s);
int Cn_translator2(char* s);
int Cn_translator3(char* s);
int main()
{
	char word[10];
	
	char op1[] = "等于",
		op2[] = "增加",
		op3[] = "减少";
	int i;
	int money = 0;
	for (i = 0;i < 12;i++)
	{
		fflush(stdin);
		scanf("%s", word);
		if (strcmp(word, op1) == 0)
		{
			scanf("%s", word);
			i += 1;
			money = Cn_translator(word);
		}
		else
        if (strcmp(word, op2) == 0)
		{
			scanf("%s", word);
			i += 1;
			money+= Cn_translator(word);
		}
		else
        if (strcmp(word, op3) == 0)
		{
			scanf("%s", word);
			i += 1;
			money-= Cn_translator(word);
		}

	}
	
	output(money);
	return 0;
}
int Cn_translator(char* s)
{
	if (strlen(s) == 2) 
	{
		return  Cn_translator1(s);
	}
	else
	if (strlen(s) == 4)
	{
		return  Cn_translator2(s);
	}
	else
	if (strlen(s) == 6)
	{
		return  Cn_translator3(s);
	}
}
int Cn_translator1(char* s)
{
	if (strcmp(s, zero) == 0)
		return 0;
	if (strcmp(s, one) == 0)
		return 1;
	if (strcmp(s, two) == 0)
		return 2;
	if (strcmp(s, three) == 0)
		return 3;
	if (strcmp(s, four) == 0)
		return 4;
	if (strcmp(s, five) == 0)
		return 5;
	if (strcmp(s, six) == 0)
		return 6;
	if (strcmp(s, seven) == 0)
		return 7;
	if (strcmp(s, eight) == 0)
		return 8;
	if (strcmp(s, nine) == 0)
		return 9;
	if (strcmp(s, ten) == 0)
		return 10;
}
int Cn_translator2(char* s)
{
	int m=0;
	int i,j;
	char k[3];   
	for (i = 0,j=10;i < 4;i += 2,j/=10)
	{
		k[0] = s[i];
		k[1] = s[i+1];
		k[2] = '\0';
		
		if(strcmp(k, one) == 0)
			m += 1;
		if(strcmp(k, two) == 0)
			m += (2 * j);
		if(strcmp(k, three) == 0)
		    m += (3 * j);
		if (strcmp(k, four) == 0)
			m += (4 * j);
		if (strcmp(k, five) == 0)
			m += (5 * j);
		if (strcmp(k, six) == 0)
			m += (6 * j);
		if (strcmp(k, seven) == 0)
			m += (7 * j);
		if (strcmp(k, eight) == 0)
			m += (8 * j);
		if (strcmp(k, nine) == 0)
			m += (9 * j);
		if(strcmp(k, ten) == 0)
			m += 10;
		
	}
       return (m);
}
int Cn_translator3(char* s) 
{
	int m = 0;
	int i, j;
	char k[3];   
	for (i = 0, j = 10;i < 6;i += 2, j /= 10)
	{
		k[0] = s[i];
		k[1] = s[i + 1];
		k[2] = '\0';
		i += 2;
		if (strcmp(k, one) == 0)
			m += 1;
		if (strcmp(k, two) == 0)
			m += (2 * j);
		if (strcmp(k, three) == 0)
			m += (3 * j);
		if (strcmp(k, four) == 0)
			m += (4 * j);
		if (strcmp(k, five) == 0)
			m += (5 * j);
		if (strcmp(k, six) == 0)
			m += (6 * j);
		if (strcmp(k, seven) == 0)
			m += (7 * j);
		if (strcmp(k, eight) == 0)
			m += (8 * j);
		if (strcmp(k, nine) == 0)
			m += (9 * j);
		
	}
	return (m);
}
void output(int i)
{
	int a, b;
	char money0[7] = { 0 };
	a = i % 10;
	b = i / 10;
	if (b != 0)
	{
		if (b != 1)
		{
			if (b == 2)
				strcat(money0, two);
			if (b == 3)
				strcat(money0, three);
			if (b == 4)
				strcat(money0, four);
			if (b == 5)
				strcat(money0, five);
			if (b == 6)
				strcat(money0, six);
			if (b == 7)
				strcat(money0, seven);
			if (b == 8)
				strcat(money0, eight);
			if (b == 9)
				strcat(money0, nine);

		}
		strcat(money0, ten);
	}
	if (a != 0)
	{
		if (a == 1)
			strcat(money0, one);
		if (a == 2)
			strcat(money0, two);
		if (a == 3)
			strcat(money0, three);
		if (a == 4)
			strcat(money0, four);
		if (a == 5)
			strcat(money0, five);
		if (a == 6)
			strcat(money0, six);
		if (a == 7)
			strcat(money0, seven);
		if (a == 8)
			strcat(money0, eight);
		if (a == 9)
			strcat(money0, nine);
     }
	
	if (a == 0 && b == 0)
		strcat(money0, zero);
	printf("%s", money0);
}
posted @ 2020-01-29 10:04  atsap  阅读(141)  评论(0编辑  收藏  举报