题目描述:
Jaanai想要选出三个字符串中长度最小的一个,但是她懒得去数字符串的长度了,她想请你帮忙找出长度最小的那个字符串,如果长度相同,就请你找出字典序最靠后的那一个。
——Jaanai
输入格式:
三行三个不同的非空字符串,不含控制字符和空格。
输出格式:
共一行,输出符合要求的字符串。
行末没有多余空格,有换行符。
样例输入:
Deemo
Phigros
Cytus
样例输出:
Deemo
数据范围:
字符串长度不超过50。
# include<stdio.h>
# include<string.h>
/*Jaanai想要选出三个字符串中长度最小的一个,但是她懒得去数字符串的长度了,
她想请你帮忙找出长度最小的那个字符串,如果长度相同,就请你找出字典序最靠后的那一个。
输入格式:三行三个不同的非空字符串,不含控制字符和空格。
输出格式:共一行,输出符合要求的字符串。行末没有多余空格,有换行符。
样例输入:
Deemo
Phigros
Cytus
样例输出:
Deemo
数据范围:
字符串长度不超过50。*/
int main()
{
char c1[50], c2[50], c3[50];
gets(c1);
gets(c2);
gets(c3);//输入三个字符串
int s1 = strlen(c1), s2 =strlen(c2), s3 = strlen(c3);//用字符串长度函数
int* min;//min储存最小字符串的地址
if (s1 < s2)//先比较1,2长度 ,分三种情况
{
min = &s1;
}
else if (s1 == s2)//长度相等,用字符串比较函数
{
if (strcmp(c1, c2) > 0)//c1的各个字符顺次与c2比较,c1的asc码大
{
min = &s1;
}
else
{
min = &s2;
}
}
else if(s1 > s2)
{
min = &s2;
}
if (*min > s3)//之后直接用min与s3比较
{
min = &s3;
}
else if (*min == s3)
{
if (min == &s1)
{
if (strcmp(c1, c3) > 0)
{
min = &s1;
}
else
{
min = &s3;
}
}
else if (min == &s2)
{
if (strcmp(c2, c3) > 0)
{
min = &s2;
}
else
{
min = &s3;
}
}
}
if (min == &s1)//最后判断min是谁的地址
{
printf("%s\n", c1);
}
else if (min == &s2)
{
printf("%s\n", c2);
}
else if (min == &s3)
{
printf("%s\n", c3);
}
return 0;
//教材参考方法
/*if(s1<s2){
if(s1<s3) printf("%s\n",c1);
else if(s1>s3) printf("%s\n",c3);
else if(s1==s3){
if(strcmp(c1,c3)>0) printf("%s\n",c1);
else printf("%s\n",c3);
}
}
else if(s1==s2){
if(s1<s3) {
if(strcmp(c1,c2)>0) printf("%s\n",c1);
else printf("%s\n",c2);
}
if(s1>s3) {
if(strcmp(c1,c3)>0) printf("%s\n",c1);
else printf("%s\n",c3);
}
else if(s1==s3){
if(strcmp(c1,c2)>0){
if(strcmp(c1,c3)>0) printf("%s\n",c1);
else printf("%s\n",c3);
}
if(strcmp(c1,c2)<0){
if(strcmp(c2,c3)>0) printf("%s\n",c2);
else printf("%s\n",c3);
}
}
}
else if(s1>s2){
if(s2<s3) printf("%s\n",c2);
else if(s2>s3) printf("%s\n",c3);
else if(s2==s3){
if(strcmp(c2,c3)>0) printf("%s\n",c2);
else printf("%s\n",c3);
}
}*/
}