2009-07-15 81 views
5

Trong C++, tôi cần phải:C++ Đảo ngược mảng

  • đọc trong một chuỗi từ người dùng nhập vào và đặt nó vào một mảng char [thực hiện]
  • Sau đó vượt qua mảng tới một hàm [thực hiện]
  • Chức năng được cho là đảo ngược thứ tự của các ký tự [vấn đề!]
  • Sau đó, quay lại trong main(), nó sẽ hiển thị mảng ban đầu với các ký tự mới được đảo ngược.

Tôi đang gặp rắc rối tạo chức năng mà thực sự hiện đảo ngược bởi vì tôi có một số hạn chế:

  • tôi không thể có bất kỳ mảng địa phương biến.
  • Không con trỏ hoặc

chức năng của tôi chỉ được đi qua trong mảng ban đầu ví dụ:

void reverse(char word[]) 

EDIT: Đây là cơ sở mã của tôi cho đến nay:

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

là bài tập về nhà này? Những hạn chế âm thanh khá tùy tiện cho thế giới thực. –

+0

Greg, vâng - chắc chắn là bài tập về nhà và tôi cũng cảm thấy như vậy! –

Trả lời

-1

Nếu chúng ta đang nói C-Strings, khi đó chức năng của bạn phải là

void reverse(char word[],size_t wordlen) 

câu trả lời đầu tiên từ cùng một câu hỏi (đây là một dupe từ Reverse a sentence in C?)

này không làm những gì bạn đang tìm kiếm, nhưng giúp bạn khá gần!

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

      return 1; 
     } 

Tín dụng cho @devinb.

+0

Xin lỗi, đó là một hạn chế khác mà tôi đã quên đề cập - không được sử dụng con trỏ. –

+0

Điều này không trả về mảng được đảo ngược, theo yêu cầu của câu hỏi. –

+0

@Greg Nơi nào nó nói rằng phải trả lại mảng đảo ngược? – Tom

8

Mặc dù vậy nhìn khá homeworky, tôi có thể đề nghị:

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

hoặc, tốt hơn hết, việc thực hiện XOR cổ điển:

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

Cảm ơn Dave, điều này thực sự hữu ích. –

+1

@dazedandconfused: Tôi chắc chắn là vậy. Bạn đã học được gì? –

+1

@dazedandconfused: Tôi đã nhìn thấy câu hỏi này trong các cuộc phỏng vấn việc làm liên quan đến C++. Tôi đồng ý với Greg. Điều quan trọng là bạn hiểu cách giải pháp của mình hoạt động. Trên một lưu ý có liên quan, trong thế giới thực có thể đơn giản sử dụng thuật toán đảo ngược chuẩn để đảo ngược thứ tự của các ký tự trong mảng, tức là std :: reverse (word, word + strlen (word)). Tuy nhiên, tôi sẽ không đưa ra giải pháp đơn giản cho giáo viên của bạn. :) – Void

2

Do đây là bài tập về nhà, tôi sẽ chỉ cho bạn hướng tới một giải pháp mà không chỉ cho bạn câu trả lời.

reverse Chức năng của bạn có thể thay đổi word được thông qua tại. Một điều bạn sẽ cần phải biết là bao lâu từ được (vì vậy bạn sẽ biết có bao nhiêu chữ để đảo ngược), bạn có thể có được điều này từ strlen() chức năng. Nếu bạn không được phép sử dụng con trỏ, thì bạn có thể sử dụng biến chỉ mục int cục bộ.

+0

Vì vậy, tôi nên chuyển đổi mảng char của tôi thành một chuỗi để sử dụng hàm strlen()? –

+0

Một chuỗi là chính xác giống như một mảng ký tự. Bạn có thể gọi strlen (word). –

+0

Cảm ơn Greg, tôi đã bị vứt bỏ bởi một 'cảnh báo' mà nó đã mang lại cho tôi. Nó đã được xây dựng tốt. –

-1

// chương trình này sẽ giúp bạn tìm tối đa và tối thiểu số trong một mảng

#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

Đây không thực sự là tác giả của câu hỏi này - họ muốn đảo ngược một mảng. – Zyerah