передать двумерный динамический массив в функцию
Мне нужно передать в функцию sort двумерный массив, и в ней сортировать его по алфавиту. Не пойму, как конкретно это записать
#include <iostream>
#include <cstring>
#include <cmath>
int string_count = pow(10,6);
int j;
int i;
void sort(char &pMassive) {
char reserve[11];
for (j = 0; j < string_count; j++) {
for (i = string_count - 1; i > j; i--) {
std::cout<< pMassive[i]<< std::endl;
if (strcmp(pMassive[i - 1], pMassive[i]) > 0) {
strcpy(reserve, pMassive[i]);
strcpy(pMassive[i], pMassive[i - 1]);
strcpy(pMassive[i - 1], reserve);
}
}
std::cout << j << " sorted " << pMassive[j] << std::endl;
}
}
int main() {
char **pMassive = new char*[string_count];
for (i = 0; i < string_count; i++) pMassive[i] = new char[11];
char symbols[27] = "abcdefghijklmnopqrstuvwxyz";
for (j = 0; j < string_count; j++) {
for (int i = 0; i < 10; i++) {
pMassive[j][i] = symbols[rand() % 26];
}
std::cout<< pMassive[j]<< std::endl;
}
// std::cout<< pMassive<< std::endl;
// sort(*pMassive);
for (i = 0; i < string_count; i++) delete[] pMassive[i];
delete[]pMassive;
return 0;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Так и передавать —
void sort(char ** pMassive)
Другое дело, что теперь, когда у вас массив указателей, вам не надо копировать строки — достаточно менять указатели.
Там еще несколько огрехов у вас есть — словом, вот исправленный код, сами сравните, что я исправил, и постарайтесь разобраться, почему.
#include <iostream>
#include <cstring>
#include <cmath>
int string_count = 20; //pow(10,6);
int j;
int i;
void sort(char **pMassive) {
char *reserve;
for (j = 0; j < string_count; j++) {
for (i = string_count - 1; i > j; i--) {
//std::cout<< pMassive[i]<< std::endl;
if (strcmp(pMassive[i - 1], pMassive[i]) > 0) {
reserve = pMassive[i];
pMassive[i] = pMassive[i - 1];
pMassive[i - 1] = reserve;
}
}
std::cout << j << " sorted " << pMassive[j] << std::endl;
}
}
int main() {
char **pMassive = new char*[string_count];
for (i = 0; i < string_count; i++) pMassive[i] = new char[11] {0};
char symbols[27] = "abcdefghijklmnopqrstuvwxyz";
for (j = 0; j < string_count; j++) {
for (i = 0; i < 10; i++) {
pMassive[j][i] = symbols[rand() % 26];
}
std::cout<< "unsorted " << pMassive[j]<< std::endl;
}
// std::cout<< pMassive<< std::endl;
sort(pMassive);
for (i = 0; i < string_count; i++) delete[] pMassive[i];
delete[]pMassive;
return 0;
}