我在CF上面ac的第一个题简单写一下
#include <stdio.h>
#include <string.h>
typedef struct {
char a[99];
char b[99];
int flag;//用来储存标志
} shirt; //定义一个结构体用来储存数据,这样可以让思路更清晰
/*
1.该函数用来判断SLM号码的大小
2.需要两个字符
3.该函数有返回值如果b号码大于a号码,则返回0;如果b号码小于a号码则返回-1;
*/
int slm(char a, char b) {
if ((a == 'S' && b == 'M') || (a == 'S' && b == 'L') || (a == 'M' && b == 'L')) {
return 0;
} else {
return -1;
}
}
int main() {
/*
6
XXXS XS
XXXL XL
XL M
XXL XXL
XXXXXS M
L M
*/
int len1;
int len2;
int n;
scanf("%d", &n);
shirt arr[n];//定义一个结构体数组
/*
对结构体数组进行输入,并且判断
*/
for (int i = 0; i < n; i++) {
scanf("%s %s", arr[i].a, arr[i].b);
len1 = strlen(arr[i].a);
len2 = strlen(arr[i].b); //就是用strlen函数获取字符串长度
if (arr[i].a[len1 - 1] == arr[i].b[len2 - 1]) { //比较最后一个字符串,相等的话执行下面的语句
if (strcmp(arr[i].a, arr[i].b) < 0) { //用strcmp函数比较两字符数组的大小
//1代表小于,2代表相等,3代表大于
if (arr[i].a[len1 - 1] == 'S') {
arr[i].flag = 3;
} else {
arr[i].flag = 1;
}
//这里反正就是M号和L号前面的X越多表示的含义正好相反
} else if (strcmp(arr[i].a, arr[i].b) == 0) {
arr[i].flag = 2;
} else {
if (arr[i].a[len1 - 1] == 'S') {
arr[i].flag = 1;
} else {
arr[i].flag = 3;
}//这里和上面的M号和L号表示的含义差不多
// arr[i].flag=3;
}
} else {//比较最后一个字符串,不相等的话执行下面的语句
if (slm(arr[i].a[len1 - 1], arr[i].b[len2 - 1]) == 0) {//调用前面的函数
arr[i].flag = 1;
} else {
arr[i].flag = 3;
}
}
}
for (int i = 0; i < n; i++) {//这里遍历输出就行,没啥好说的
if (i != 0) {
printf("\n");
}
if (arr[i].flag == 2) {
printf("=");
} else if (arr[i].flag == 1) {
printf("<");
} else if (arr[i].flag == 3) {
printf(">");
}
}
return 0;
}