2009-07-15 22 views
5

W C++, muszę:C++ Rewers Array

  • odczytywane sznurku od danych wejściowych użytkownika i umieścić ją w tablicy char [Done]
  • następnie przekazać tę tablicę do funkcji [zrobić]
  • Funkcja ma odwrócić kolejność znaków [problem!]
  • Następnie z powrotem w main() wyświetla oryginalną tablicę z nowo odwróconymi znakami.

Mam problemy tworzenie funkcji, które faktycznie robi cofania, ponieważ mam pewne ograniczenia:

  • nie mogę mieć każdy lokalny tablicę zmienne.
  • żadnych wskazówek ani

Moja funkcja przechodzi tylko w oryginalnej tablicy tj

void reverse(char word[]) 

EDIT: Oto moja baza kodu do tej pory:

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

Czy to zadanie domowe? Te ograniczenia brzmią całkiem arbitralnie dla prawdziwego świata. –

+0

Greg, tak - to na pewno jest praca domowa i czuję to samo! –

Odpowiedz

-1

gdybyśmy rozmawiają C-Stringi, wtedy twoja funkcja powinna być

void reverse(char word[],size_t wordlen) 

Pierwsza odpowiedź z tej samej kwestii (jest to dupe od Reverse a sentence in C?)

nie robić to, czego szukasz, ale dostaje całkiem blisko!

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

      return 1; 
     } 

Kredyty na @devinb.

+0

Przepraszam, to jest kolejne ograniczenie, o którym zapomniałem wspomnieć - nie powinno się też używać wskaźników. –

+0

Nie zwraca odwróconej tablicy, zgodnie z żądaniem pytania. –

+0

@Greg Gdzie jest napisane, że musi zwrócić tablicę odwróconą? – Tom

8

Mimo to patrząc całkiem homeworky, mogę zasugerować:

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; 
    } 
} 

lub, jeszcze lepiej, klasyczny realizacja XOR:

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

Dzięki Dave, to naprawdę pomaga. –

+1

@dazedandconfused: Jestem pewien, że tak. Czego się nauczyłeś? –

+1

@dazedandconfused: Widziałem to pytanie w wywiadach kwalifikacyjnych w C++. Zgadzam się z Gregiem. Ważne jest, abyś zrozumiał, jak działa jego rozwiązanie. Na podobny temat, w realnym świecie można po prostu użyć standardowego algorytmu odwrotnego, aby odwrócić kolejność znaków w tablicy, tj. Std :: reverse (słowo, słowo + strlen (słowo)). Nie podałbym jednak tego prostego rozwiązania nauczycielowi. :) – Void

2

Ponieważ jest to praca domowa, będę wskazać Ci kierunku rozwiązanie bez udzielania ci odpowiedzi.

Twój reverse funkcja może modyfikować word, który jest przekazywany w. Jedną z rzeczy, trzeba wiedzieć, jak długo słowo jest (tak będziesz wiedzieć, ile listów do tyłu), można uzyskać to od strlen() funkcjonować. Jeśli nie masz uprawnień do używania wskaźników, możesz użyć lokalnej zmiennej indeksowej int.

+0

Więc, czy powinienem przekonwertować tablicę znaków na ciąg znaków, aby użyć funkcji strlen()? –

+0

Ciąg jest dokładnie taki sam, jak tablica znaków. Możesz zadzwonić do strlen (słowo). –

+0

Dzięki, Greg, zostałem odrzucony przez "ostrzeżenie", że mi to daje. To było w porządku. –

-1

// Program ten pomaga znaleźć maksymalną i minimalną liczbę w tablicy

#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

To nie jest to, o co prosił autor tego pytania - chcieli odwrócić tablicę. – Zyerah