gpt4 book ai didi

c - 将字符转为数字并在c中排列数字

转载 作者:行者123 更新时间:2023-11-30 14:45:46 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com