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;
所以首先,我被要求输入随机排列的某些字符,并按照最高优先级将它们打印出来。
运算符的优先级(从最高到最低)为“!” (逻辑非)、“%”(余数)、“&” (按位与)、“^”(按位异或)、、“|” (按位或)。
所以我尝试将字符更改为数字,并尝试先排列数字,然后再次将数字更改为字符。
但是当我尝试检查数字是否排列正确时,结果却并非如此。
知道我的代码有什么问题吗? 或者有什么想法可以让我的代码更简单,而不必将字符转换为数字?
这是示例
示例输入
3
& ^ %
& ^ !
& ^ !
样本输出
Case #1: % & ^
Case #2: ! & ^
Case #3: ! & ^
最佳答案
评论中已经指出了一些问题。具体来说,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;
}
关于c - 将字符转为数字并在c中排列数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52800193/