我不知道如何在单个输入中替换多个char输入,如上所示。样本输入包含将char和int作为组合的元素数组。
然后对输出进行排序,并删除多个出现的位置,并替换为一个,再加上与char相关的整数。
样本输入:
5
M 25
A 50
O 70
A 45
L 100
样本输出:
A 95
L 100
M 25
O 70
答案 0 :(得分:1)
您不必删除多次出现,而只需对与每个字符关联的值求和即可。
两对中的键只是一个字符,因此可能的值受到限制,可以将它们用作包含相关值之和的数组的索引,而另一个则指示是否使用了该字符。如果与字符关联的数字始终为正,则可能只有一个数组将计数初始化为-1。
根据定义,在连续索引上进行迭代以写入计数后,将产生按字符排序的计数。
例如:
#include <stdio.h>
#include <limits.h>
int main()
{
int n, i;
int count[1 << CHAR_BIT] = { 0 };
char used[1 << CHAR_BIT] = { 0 };
/* read inputs */
puts("enter number of couples:");
if ((scanf("%d", &n) != 1) || (n <= 0)) {
fprintf(stderr, "invalid number");
return -1;
}
puts("enter couples");
for (i = 0; i != n; ++i) {
unsigned char c;
int v;
if (scanf(" %c %d", &c, &v) != 2) {
fprintf(stderr, "invalid couple");
return -1;
}
used[c] = 1;
count[c] += v;
}
/* write result */
puts("result :");
for (i = 0; i != (1 << CHAR_BIT); ++i) {
if (used[i])
printf("%c %d\n", (char) i, count[i]);
}
return 0;
}
一些评论:
CHAR_BIT
。" %c %d"
格式,%c
之前的空格允许绕过空格/换行符编译和执行:
/tmp % gcc -pedantic -Wextra -Wall c.c
/tmp % ./a.out
enter number of couples:
5
enter couples
M 25 A 50
O 70 A 45 L 100
result :
A 95
L 100
M 25
O 70