Я думаю, что проблема в том, что вы пытаетесь сравнивать числа, но на самом деле вы сравниваете символы.
if ( argv[j][0] < argv[pos][0] )
{
pos = j;
}
В приведенном выше коде вы сравниваете первые символы строк в таблице ASCII. Так что, если вы сравните 5 < 14
-> оценивает значение true - это фактически сравнит 5 < 1
-> который оценивает значение false. Следовательно, вы получите неправильный вывод: 0 14 13 5 8 9
('0' <'1' <= '1' <'5' <'8' <'9' в ASCII-коде). </p>
Решить проблема, вы должны разобрать строки (аргументы командной строки) в целые числа, а затем сравнить целые числа.
int number = std::stoi(argv[1]); //converts first string / argument in a integer
Это должно сработать сейчас.
int* nums = new int[argc - 1];
//converts strings into integerarray
for ( int i = 0; i < argc - 1; i++ )
{
nums[i] = std::stoi( argv[i + 1] );
}
//sorts the array
std::sort( nums, nums + argc - 1 );
//prints the array
for ( int i = 0; i < argc - 1; i++ )
{
std::cout << nums[i] << std::endl;
}
return 0;
Для сортировки я будет использовать std::sort()
или что-либо готовое.
Чтобы проверить, отсортирован ли массив, также будут предопределенные функции. Я нашел std::is_sorted()
например. Вы можете использовать свои собственные функции, но я бы посоветовал вам использовать проверенные и популярные функции, они сделают ваш код менее подверженным ошибкам.
bool sortedAsc( int* arr, int len )
{
for ( int i = 0; i < len; i++ )
{
if ( arr[i] > arr[i] + 1 )
return false;
}
return true;
}
bool sortedDesc( int* arr, int len )
{
for ( int i = 0; i < len; i++ )
{
if ( arr[i] < arr[i] + 1 )
return false;
}
return true;
}
В вашем коде вызовите его с помощью
int argLength = argc - 1;
if ( sortedAsc( nums, argLength ) )
{
std::cout << "sorted ascending" << std::endl;
}
else if ( sortedDesc( nums, argLength ) )
{
std::cout << "sorted descending" << std::endl;
}