int T, i;
scanf("%d", &T);
char a[T], b[T], c[T];
int temp[T], temp2[T], temp3[T];
int point1[T], point2[T], point3[T];
for(i=0;i<T; i++){
scanf("%c %c %c", &a[i], &b[i], &c[i]);
switch(a[i]){
case '!':
point1[i] = 5;
break;
case '%':
point1[i] = 4;
break;
case '&':
point1[i] = 3;
break;
case '^':
point1[i] = 2;
break;
case '|':
point1[i] = 1;
break;
default :
point1[i]=10;
}
switch(b[i]){
case '!':
point2[i] = 5;
break;
case '%':
point2[i] = 4;
break;
case '&':
point2[i] = 3;
break;
case '^':
point2[i] =2;
break;
case '|':
point2[i] =1;
break;
default :
point2[i]=10;
}
switch(c[i]){
case '!':
point3[i] = 5;
break;
case '%':
point3[i] = 4;
break;
case '&':
point3[i] = 3;
break;
case '^':
point3[i] =2;
break;
case '|':
point3[i] =1;
break;
default :
point3[i]=10;
}
if(point1[i]<point2[i]) {
temp[i]=point1[i];
point1[i]=point2[i];
point2[i]=temp[i];
}
if(point1[i]<point3[i]){
temp2[i]=point1[i];
point1[i]=point3[i];
point3[i]=temp2[i];
}
if(point2[i]<point3[i]){
temp3[i]=point2[i];
point2[i]=point3[i];
point3[i]=temp3[i];
}
printf("%d %d %d\n", point1[i], point2[i], point3[i]);
}
return 0;
因此,首先,我被要求输入随机排列的某些字符,并使其从最高优先级开始打印。
运算符的优先级(从最高到最低)是“!” (逻辑非),“%”(余数),“&” (按位AND),“ ^”(按位XOR),“ |” (按位或)。
因此,我尝试将字符更改为数字,并尝试首先排列数字,然后再次将数字更改为字符。
但是当我尝试检查数字是否正确排列时,不是。
任何想法我的代码有什么问题吗? 还是有任何使我的代码更简单而不必将字符转换为数字的想法?
这是示例
样本输入
3
& ^ %
& ^ !
& ^ !
样本输出
Case #1: % & ^
Case #2: ! & ^
Case #3: ! & ^
答案 0 :(得分:1)
评论中已经提到了一些问题。具体来说,scanf
将尾随换行符留在输入缓冲区中。您可以使用@ 4386427的建议来解决此问题。
您可以避免为每个字符手动分配数字,只需注意它们的ASCII已经按要求的顺序。那是, '!' <'%'<'&'<'^'<'|'。因此,您可以简单地将它们读入适当大小的char数组中,并在打印char数组之前按升序对其进行排序。这将大大缩短和清理您的代码。
#include <stdio.h>
#include <stdlib.h>
int cmpfunc (const void * a, const void * b) {
return (*((char*)a) > *((char*)b)) - (*((char*)a) < *((char*)b));
}
int main(int argc, char *argv[])
{
int T, i, j;
scanf(" %d", &T);
/* TODO: Check if number of chars per line is T or 3. */
char *a = malloc(T * sizeof(char));
for(i = 0; i < T; i++) {
for (j = 0; j < T; j++) {
scanf(" %c", &a[j]);
}
printf("Before sort\n");
for (j = 0; j < T; j++) {
printf("%c ", a[j]);
}
printf("\n");
qsort(a, T, sizeof(a[0]), cmpfunc);
printf("After sort\n");
for (j = 0; j < T; j++) {
printf("%c ", a[j]);
}
printf("\n");
}
free(a);
return 0;
}