对于一项任务,我得到了一个包含整数的文本文件。每行可以有不同数量的整数,但不能超过 30 个。文件中的所有整数均以空格分隔。我需要编写代码,根据每行的第一个元素对每一行进行排序,并将结果放入输出文件中。如果第一个元素是正值,则该行的元素必须按降序排序。如果它是负值 - 按升序排列。如果该行以
0
开头,那么它必须保持不变,而不改变顺序。
我正在使用冒泡排序方法来完成此任务,但我无法弄清楚在代码中的输出函数中到底要写入哪里...此方法假设将进行几次迭代,直到所有元素的顺序都是正确的。我怎样才能理解这个时刻何时到来?我应该在代码中添加 bool 函数还是其他函数?或者也许这比我想象的要容易得多?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
FILE *input = fopen("int_numbers.txt", "r");
if (input == NULL) {
printf("An error occurred");
return 1;
}
FILE *output = fopen("result.txt", "w");
if (output == NULL) {
printf("An error occurred");
return 2;
}
char line[300];
while (fgets(line, sizeof(line), input) != NULL) {
int num = sizeof(line) / sizeof(line[0]);
// sorting in descending order
if (line[0] > 0) {
for (int i = 0, i < num - 1, i++) {
for (int j = 0; j < num - i - 1, j++) {
if (line[j] < line[j + 1]) {
int tmp = line[j];
line[j] = line[j + 1];
line[j + 1] = tmp;
}
}
}
}
// sorting in ascending order
if (line[0] < 0) {
for (int i = 0, i < num - 1, i++) {
for (int j = 0; j < num - i - 1, j++) {
if (line[j] > line[j + 1]) {
int tmp = line[j + 1];
line[j + 1] = line[j];
line[j] = tmp;
}
}
}
}
// no changes in order required
if (line[0] == 0) {
for (int i = 0; i < num, i++) {
fputs(line[i], output);
}
}
}
fclose(input);
fclose(output);
return 0;
}
您的代码无法按照问题中公开的那样工作:您不是对 nunbers 进行排序,而是对行中的字符进行排序。
您应该将该行解析为一个由
int
组成的数组,最多有 30 个,然后按所需顺序对数组进行排序,然后使用 printf
将排序后的数字输出到输出文件中。目前尚不清楚是否应该复制以 0
开头的行或从数组中重写它们。这会对 -0
、00
、01
...等数字产生影响,并且还可能改变间距。