У меня есть код ниже, который может производить
[p18d541@csci112 program1]$ ./main 17 < inp17.txt
12 25 110 168
35 64 113 134
91 158 183 217
102 129 130 146
26 116 215 223
0 78 81 162
19 25 204 222
124 138 157 245
137 183 201 249
61 67 106 236
60 71 106 236
63 81 106 240
14 27 111 168
17 27 111 168
26 116 215 220
111 137 202 249
111 137 202 246
от ввода
168.12.110.25
64.113.134.35
217.158.91.183
102.130.129.146
215.116.26.223
81.162.78.0
19.204.25.222
245.124.138.157
137.249.183.201
106.61.236.67
106.71.236.60
106.81.240.63
168.14.111.27
168.17.111.27
215.116.26.220
137.249.111.202
137.246.111.202
поэтому мой код сканирует входные данные, сохраняет значения в сети, а затем мне нужно упорядочить их по столбцу от наименьшего к наибольшему, начиная с первого числа и продвигаясь вправо. Примером первых нескольких будет
0 78 81 162
12 25 110 168
14 27 111 168
.
.
.
111 137 202 246
111 137 202 249
.
.
.
.
//declare libraries
#include <stdio.h>
#include <stdlib.h>
//declare other functions/files to be used in the program
void print_fun(void);
int sort_fun(int arg, unsigned char networks[arg][4]);
void read_fun(void);
//read command line input and store the information
int main(int argc, char** argv){
//declar variable
int arg = 0;
//make argv into an int
arg = atoi(argv[1]);
//assign size to networks
unsigned char networks[arg][4];
//assign input to networks
for (int j =0; j<1; ++j){
if(argc == 1)
{
printf("ERROR ERROR, you messed up\n");
}
else
{
// hold network addresses in a 2-d array, with 4 nsigned char
for(int k = 0; k<arg; k++){
for (int i =0; i<4; i++){
scanf("%hhu.", &networks[k][i]);
//checks to see if scanf was working roperly
// printf(" %hhu",networks[k][i]);
}
//printf("\n");
}}}
sort_fun(arg, networks);
//sort array
//count networks
//print info about the array
return(0);
}
int sort_fun(int arg, unsigned char networks[arg][4]){
//declaring variabes
//sorting by comlumn p
for (int k = 0; k < arg; k++){
for( int i = 0; i < 4; i++){
for (int j = i+1; j<4; ++j){
if (networks[k][i] > networks[k][j]) {
int swap = networks[k][i];
networks[k][i] = networks[k][j];
networks[k][j] = swap;
}
}
}
}
for (int i =0; i<arg; i++){
for (int j =0; j < 4; j++){
printf(" %hhu", networks[i][j]);
}
printf("\n");
}
return(0);
}
Я пробовал переключать переменные в моем цикле for и возиться со значениями, но я не могу понять, как изменить мой код, чтобы он работал в столбцах, а не в строках.
и, кстати, каждое значение хранится в отдельном элементе массива, но они должны склеиваться, как и во входных данных, поэтому при перемещении одного числа вся строка перемещается вместе с ним. Пожалуйста, дайте мне знать, что вы думаете. благодарю вас.
int compare(int addr1[4], int addr2[4])
. Функция сравнения должна возвращать -1 (меньше), 0 (равно) или 1 (больше). Начните со сравненияaddr1[0]
сaddr2[0]
. Если они не равны, верните -1 или 1 в зависимости от ситуации. В противном случае перейдите к следующему полю. В конце, если все четыре поля совпадают, вернуть 0. - person user3386109   schedule 23.05.2021i
иj
. Элементами массива 1D являютсяnetworks[i]
иnetworks[j]
. Вы должны иметь возможность сравнивать эти элементы и менять их местами. Итак, напишите функциюcompare
и функциюswap
. Вызовите функциюcompare
, напримерresult = compare(networks[i], networks[j])
. Вызовите функциюswap
, напримерswap(networks[i], networks[j])
. Если у вас есть функции, которые могут сравнивать и менять местами IP-адреса, код сортировки будет точно таким же, как сортировка одномерного массива. - person user3386109   schedule 24.05.2021