2009-07-15 10 views
5

In C++, devo:C++ inverso Array

  • Leggi in una stringa da input dell'utente e metterlo in un array di char [fatto]
  • quindi passare tale matrice a una funzione [fatto]
  • La funzione dovrebbe invertire l'ordine dei caratteri [problema!]
  • Quindi, di nuovo nello main(), visualizza quell'array originale con i caratteri nuovamente invertiti.

sto avendo problemi a creare la funzione che fa in realtà la retromarcia perché ho alcune restrizioni:

  • Non posso avere alcuna matrice locale variabili.
  • Nessun puntatori o

La mia funzione passa solo nella matrice originale vale a dire:

void reverse(char word[]) 

EDIT: Ecco la mia base di codice finora:

void reverse(char word[]); 

void main() 
{ 
    char word[MAX_SIZE]; 

    cout << endl << "Enter a word : "; 
    cin >> word; 
    cout << "You entered the word " << word << endl; 

    reverse(word); 

    cout << "The word in reverse order is " << word << endl; 
} 

void reverse(char myword[]) 
{ 
    int i, temp; 
    j--; 

    for(i=0;i<(j/2);i++) 
    { 
    temp  = myword[i]; 
    myword[i] = myword[j]; 
    myword[j] = temp; 

    j--; 
    } 
} 
+0

È questo compito? Queste restrizioni sembrano abbastanza arbitrarie per il mondo reale. –

+0

Greg, sì - è sicuramente un compito a casa e io mi sento allo stesso modo! –

risposta

-1

Se noi stanno parlando C-Strings, quindi la tua funzione dovrebbe essere

void reverse(char word[],size_t wordlen) 

Prima risposta dalla stessa domanda (questa è una vittima da Reverse a sentence in C?)

Questo non fa quello che si sta cercando, ma si ottiene abbastanza vicino!

int ReverseString(char *rev) 
     { 
      if(*rev!='\0') 
      { 
       ReverseString(rev + 1); 
       putchar(*rev);//change this. 
      } 

      return 1; 
     } 

crediti per @devinb.

+0

Mi spiace, questa è un'altra restrizione che ho dimenticato di menzionare - non si suppone che utilizzi i puntatori. –

+0

Questo non restituisce l'array invertito, come richiesto dalla domanda. –

+0

@Greg Dove dice che deve restituire l'array inverso? – Tom

8

Nonostante questo guardando abbastanza homeworky, mi permetto di suggerire:

void reverse(char word[]) 
{ 
    int len=strlen(word); 
    char temp; 
    for (int i=0;i<len/2;i++) 
    { 
      temp=word[i]; 
      word[i]=word[len-i-1]; 
      word[len-i-1]=temp; 
    } 
} 

o, meglio ancora, l'attuazione XOR classica:

void reverse(char word[]) 
{ 
    int len=strlen(word); 
    for (int i=0;i<len/2;i++) 
    { 
     word[i]^=word[len-i-1]; 
     word[len-i-1]^=word[i]; 
     word[i]^=word[len-i-1]; 
    } 
} 
+0

Grazie a Dave, questo aiuta davvero. –

+1

@dazedandconfused: sono sicuro che lo faccia. Cos'hai imparato? –

+1

@dazedandconfused: ho visto questa domanda in interviste di lavoro relative al C++. Sono d'accordo con Greg. È importante capire come funziona la sua soluzione. In una nota correlata, nel mondo reale si potrebbe semplicemente utilizzare l'algoritmo di inversione standard per invertire l'ordine dei caratteri nella matrice, cioè std :: reverse (parola, parola + strlen (parola)). Non darei comunque una soluzione semplice al tuo insegnante. :) – Void

2

Poiché si tratta di compiti a casa, ti indicherò verso un soluzione senza solo darti la risposta.

La funzione reverse può modificare la word che viene passato. Una cosa che devi sapere è quanto a lungo la parola è (così saprai quante lettere invertire), è possibile ottenere questo dal strlen() funzione. Se non ti è consentito utilizzare i puntatori, puoi utilizzare una variabile di indice locale int.

+0

Quindi, dovrei convertire il mio array in una stringa per utilizzare la funzione strlen()? –

+0

Una stringa è esattamente la stessa di una matrice di caratteri. Puoi chiamare strlen (word). –

+0

Grazie a Greg, mi sono buttato fuori da un "avvertimento" che mi stava dando. Stava andando bene. –

-1

// Questo programma ti aiuta a trovare numero massimo e minimo in un array

#include<iostream.h> 
#include<conio.h> 
int main() 
{int max; 

    int a[5]={12,1,0,4,5}; 
int min=a[0]; 
    int i=1; 
    max=a[0]; 

    while(i<=4) 
    { 
       if (max < a[i]) 
       max=a[i]; 
       if (min > a[i]) 
       min=a[i]; 
       i++; 

    } 
       cout << min <<"\n"; 
       cout << max; 
       getch(); 
       return 0; 
}    
+1

Questo non è esattamente ciò che l'autore di questa domanda stava chiedendo: volevano invertire un array. – Zyerah