供参考:
#include <stdio.h>
int main()
{
char str[10001];
int i, g, p, l, t;
scanf("%s", str);
for (i = 0, g = 0, p = 0, l = 0, t = 0; str[i]; i++) {
if (str[i] == 'g' || str[i] == 'G')
g++;
else if (str[i] == 'p' || str[i] == 'P')
p++;
else if (str[i] == 'l' || str[i] == 'L')
l++;
else if (str[i] == 't' || str[i] == 'T')
t++;
}
while (g > 0 || p > 0 || l > 0 || t > 0) {
if (g > 0)
printf("G"), g--;
if (p > 0)
printf("P"), p--;
if (l > 0)
printf("L"), l--;
if (t > 0)
printf("T"), t--;
}
return 0;
}
看一下你的代码?
【以下回答由 GPT 生成】
错误1: 数组 arr 的大小应为常量表达式,不能是变量 n。解决方法是将 int arr[n]; 改为 int arr = (int)malloc(sizeof(int) * n);,并在使用完成后记得释放内存,即 free(arr);
错误2: 在使用 scanf 读取 arr 数组元素的时候,应该传入元素的地址,而不是元素的值。解决方法是将 scanf("%d", arr[i]); 改为 scanf("%d", &arr[i]);
改正后的代码如下:
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, m;
scanf("%d %d", &n, &m);
int i;
int *arr = (int*)malloc(sizeof(int) * n); // 为 arr 动态分配内存
for (i = 0; i < n; i++) {
scanf("%d", &arr[i]); // 将元素的地址传给 scanf
}
int index, val;
for (i = 0; i < m; i++) {
scanf("%d %d", &index, &val);
if (index >= n || index < 0) {
printf("Index out of bounds\n");
} else {
arr[index] = val;
}
}
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
free(arr); // 释放内存
return 0;
}
注意:在使用动态分配的内存时,需要手动释放内存以避免内存泄漏。
【相关推荐】