следующий код о вращении отсортированного массива на некоторое значение d - PullRequest
1 голос
/ 20 февраля 2020

мой код не работает, он приводит к неожиданным результатам. Код касается вращения массива с использованием временного массива. функция "rotate" вращает массив, а функция printArray печатает массив. В основной функции вызываются обе функции. тогда есть cout с "привет". общий выход, если "ellolloloohello". почему я получаю этот вывод. спасибо

 #include<iostream>
 using namespace std;

 void rotate(int arr[],int d, int n){
int temp[d];
for(int i =0;i<d;i++){
    temp[i]=arr[i];

}
for(int i = 0;i<n-d;i++){
    arr[i] = arr[i+d];
}
for(int i =0 ;i < d;i++)
{
    temp[i]= arr[n-d+i];

}

}
void printArray(int arr[],int size){
for(int i =0;i<size;i++)
{

    cout<<arr[i]+" " ;
}
}
int main()
{

int arr[10] = {0,1,2,3,4,5,6,7,8,9};
rotate(arr,3,10);
printArray(arr,10);
cout <<"hello";
}
;

вывод "ellolloloohello" вместо "hello". что здесь происходит ?????

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

Для начала массивы переменной длины

void rotate(int arr[],int d, int n){
    int temp[d];
    //...

не является стандартной функцией C ++. Либо используйте вспомогательный стандартный контейнер, например, std :: vector или std :: list, либо вы должны динамически распределять массив.

В последнем l oop функции

 void rotate(int arr[],int d, int n){
int temp[d];
for(int i =0;i<d;i++){
    temp[i]=arr[i];

}
for(int i = 0;i<n-d;i++){
    arr[i] = arr[i+d];
}
for(int i =0 ;i < d;i++)
{
    temp[i]= arr[n-d+i];

}
}

вы переписываете массив temp вместо массива arr.

И в функции printArray в этом выражении

cout<<arr[i]+" " ;

в выражении

arr[i]+" " 

есть использовал указатель арифмети c. То есть строковый литерал " " неявно преобразуется в указатель на его первый элемент, а число c значение arr[i] используется в качестве смещения для этого указателя. Вместо этого напишите

cout<<arr[i] << " " ;
0 голосов
/ 20 февраля 2020

Измените cout<<arr[i]+" " ; на cout << arr[i] << ' ';

И, пожалуйста, используйте std :: vector. int arr[d] не с ++: (

...