PAT 1044火星数字 测试能通过 但是有点疑问 希望大神解答一下

在这里插入图片描述
关于strlen我不太明白,我用strlen判断输入是3个字母还是6个字母,比如elo nov 和tam,if(strlenc[i]>3)一直不通过,改为if(strlenc[i]>4)就通过了,这是啥原因呀?
下面是代码

// ConsoleApplication22.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include<string.h>
using namespace std;
void  dzh1(int a){
	switch (a) {
	case 0:cout << "tret"; break;
	case 1:cout << "jan"; break;
	case 2:cout << "feb"; break;
	case 3:cout << "mar"; break;
	case 4:cout << "apr"; break;
	case 5:cout << "may"; break;
	case 6:cout << "jun"; break;
	case 7:cout << "jly"; break;
	case 8:cout << "aug"; break;
	case 9:cout << "sep"; break;
	case 10:cout << "oct"; break;
	case 11:cout << "nov"; break;
	case 12:cout << "dec"; break;
	}
}
void dzh2(int a) {
	switch (a) {
	case 1:cout << "tam"; break;
	case 2:cout << "hel"; break;
	case 3:cout << "maa"; break;
	case 4:cout << "huh"; break;
	case 5:cout << "tou"; break;
	case 6:cout << "kes"; break;
	case 7:cout << "hei"; break;
	case 8:cout << "elo"; break;
	case 9:cout << "syy"; break;
	case 10:cout << "lok"; break;
	case 11:cout << "mer"; break;
	case 12:cout << "jou"; break;
	}
}
int  hzd(char a[]) {
	if (strcmp(a, "tret") == 0) return 0;
	if (strcmp(a, "jan") == 0) return 1;
	if (strcmp(a, "feb") == 0) return 2;
	if (strcmp(a, "mar") == 0) return 3;
	if (strcmp(a, "apr") == 0) return 4;
	if (strcmp(a, "may") == 0) return 5;
	if (strcmp(a, "jun") == 0) return 6;
	if (strcmp(a, "jly") == 0) return 7;
	if (strcmp(a, "aug") == 0) return 8;
	if (strcmp(a, "sep") == 0) return 9;
	if (strcmp(a, "oct") == 0) return 10;
	if (strcmp(a, "nov") == 0) return 11;
	if (strcmp(a, "dec") == 0) return 12;
	if (strcmp(a, "tam") == 0) return 13;
	if (strcmp(a, "hel") == 0) return 26;
	if (strcmp(a, "maa") == 0) return 39;
	if (strcmp(a, "huh") == 0) return 52;
	if (strcmp(a, "tou") == 0) return 65;
	if (strcmp(a, "kes") == 0) return 78;
	if (strcmp(a, "hei") == 0) return 91;
	if (strcmp(a, "elo") == 0) return 104;
	if (strcmp(a, "syy") == 0) return 117;
	if (strcmp(a, "lok") == 0) return 130;
	if (strcmp(a, "mer") == 0) return 143;
	if (strcmp(a, "jou") == 0) return 156;
}
int main()
{
	int n,number;
	cin >> n;
	char c[101][20],ch;
	ch = getchar();
	for (int i = 0; i < n; i++) {
		cin.getline(c[i], 20);
		
	}
	for (int i = 0; i < n; i++) {
		if (c[i][0] >= '0'&&c[i][0] <= '9') {//地球文的时候
			if (strlen(c[i]) == 1) {
				number = c[i][0] - '0';
			}
			if (strlen(c[i]) == 2) {
				number = (c[i][0] - '0') * 10 + c[i][1] - '0';
			}
			if (strlen(c[i]) == 3) {
				number = (c[i][0] - '0') * 100 + (c[i][1] - '0')*10+c[i][2]-'0';
			}
			if (number <= 12) {
				dzh1(number);
				cout << endl;
			}
			else if (number > 12) {
				int a[2];
				a[1] = number%13;
				a[0] = (number / 13);
				if (a[1] == 0) {
					dzh2(a[0]);
					cout << endl;
				}
				else {
					dzh2(a[0]);
					cout << " ";
					dzh1(a[1]);
					cout << endl;
				}
			}
		}
		else
		{
			if (strlen(c[i]) > 4) {
				char c1[5],c2[5];
				int j,k;
				for ( j = 0; j < 3; j++)
					c1[j] = c[i][j];
				c1[j] = '\0';
				for( j=4,k=0;j<strlen(c[i]);j++,k++)
					c2[k] = c[i][j];
			    c2[k] = '\0';
				number = hzd(c1) + hzd(c2);
				cout << number << endl;
	
			}
			else {
				cout << hzd(c[i])<<endl;
			}
		}
	}
		
}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值