解题思路:
这题目要求根据输入的星期几的第一个字母来判断是星期几,如果第一个字母相同,则继续判断第二个字母。首先,需要了解星期的命名规则,即星期的全称一般以两个字母缩写为主。
现在,让我们使用这三种方法来实现根据输入的星期首字母判断星期几。
方法1: 直接判断法
#include
#include
char* determine_day_direct(char first_char, char second_char) {
if (first_char == 'm') {
if (second_char == 'o')
return "Monday";
else
return "None";
} else if (first_char == 't') {
if (second_char == 'u')
return "Tuesday";
else if (second_char == 'h')
return "Thursday";
else
return "None";
} else if (first_char == 'w') {
return "Wednesday";
} else if (first_char == 'f') {
return "Friday";
} else if (first_char == 's') {
if (second_char == 'a')
return "Saturday";
else if (second_char == 'u')
return "Sunday";
else
return "None";
} else {
return "None";
}
}
int main() {
char first_char, second_char;
printf("Enter the first letter of the day: ");
scanf(" %c", &first_char); // Leading space to skip whitespace characters
printf("Enter the second letter of the day: ");
scanf(" %c", &second_char);
char* day = determine_day_direct(first_char, second_char);
if (strcmp(day, "None") == 0)
printf("Invalid input.\n");
else
printf("The day is: %s\n", day);
return 0;
}
方法2: 利用哈希表
#include
#include
char* determine_day_hash(char first_char, char second_char) {
const char* days[] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
const char* initials[] = {"mo", "tu", "we", "th", "fr", "sa", "su"};
int index = -1;
char input[3];
input[0] = first_char;
input[1] = second_char;
input[2] = '\0';
for (int i = 0; i < 7; i++) {
if (strcmp(input, initials[i]) == 0) {
index = i;
break;
}
}
if (index != -1)
return (char*)days[index];
else
return "None";
}
int main() {
char first_char, second_char;
printf("Enter the first letter of the day: ");
scanf(" %c", &first_char); // Leading space to skip whitespace characters
printf("Enter the second letter of the day: ");
scanf(" %c", &second_char);
char* day = determine_day_hash(first_char, second_char);
if (strcmp(day, "None") == 0)
printf("Invalid input.\n");
else
printf("The day is: %s\n", day);
return 0;
}
方法3: 使用字符串比较
#include
#include
char* determine_day_string_compare(char first_char, char second_char) {
const char* days[] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
char input[3];
input[0] = first_char;
input[1] = second_char;
input[2] = '\0';
for (int i = 0; i < 7; i++) {
if (strcmp(input, days[i]) == 0)
return (char*)days[i];
}
return "None";
}
int main() {
char first_char, second_char;
printf("Enter the first letter of the day: ");
scanf(" %c", &first_char); // Leading space to skip whitespace characters
printf("Enter the second letter of the day: ");
scanf(" %c", &second_char);
char* day = determine_day_string_compare(first_char, second_char);
if (strcmp(day, "None") == 0)
printf("Invalid input.\n");
else
printf("The day is: %s\n", day);
return 0;
}
相比哈希表法,需要进行多次字符串比较,可能会略微降低效率。
总结和推荐: