繁体   English   中英

C++ 反向数组

[英]C++ Reverse Array

在 C++ 中,我需要:

  • 从用户输入中读取字符串并将其放入字符数组 [完成]
  • 然后将该数组传递给函数 [done]
  • 该函数应该颠倒字符的顺序[问题!]
  • 然后,回到main() ,它显示带有新反转字符的原始数组。

我在创建实际执行反转的函数时遇到问题,因为我有一些限制:

  • 我不能有任何局部数组变量。
  • 也没有指点

我的函数只传入原始数组,即:

void reverse(char word[])

编辑:到目前为止,这是我的代码库:

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

尽管看起来很家庭作业,但我可以建议:

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

或者更好的是经典的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];
    }
}

由于这是家庭作业,因此我将为您提供解决方案,而不仅仅是给您答案。

您的reverse函数可以修改传入的word 。您需要知道的是单词有多长(这样您就知道要反转多少个字母),您可以从strlen()函数中获取。 如果不允许使用指针,则可以使用局部int索引变量。

我可以提供您的问题的解决方案,使用算法深度优先搜索

#include <iostream>
#include <vector>
void showContentVector(std::vector<int>& input)
{
    for(int i=0; i<input.size(); ++i)
    {
        std::cout<<input[i]<<", ";
    }
    return;
}
void dfs(int current, int previous, std::vector<int>& input, std::vector<int>& visited)
{
    if(visited[current]==1)
    {
        return;
    }
    visited[current]=1;
    int item=input[current];
    for(int next=(current+1); next<input.size(); ++next)
    {
        if(next==previous)
        {
            continue;
        }
        dfs(next, current, input, visited);
    }
    if(current==input.size()-1)
    {
        input.clear();
    }
    input.push_back(item);
    return;
}
void solve()
{
    const int maximumSize=5;
    std::vector<int> values={1, 2, 3, 4, 5};
    std::vector<int> visited(maximumSize, 0);
    std::cout<<"Before, values <- ";
    showContentVector(values);
    dfs(0, -1, values, visited);
    std::cout<<std::endl<<"After, values <- ";
    showContentVector(values);
    std::cout<<std::endl;
    return;
}
int main()
{
    solve();
    return 0;
}

结果如下:

Before, values <- 1, 2, 3, 4, 5, 
After, values <- 5, 4, 3, 2, 1, 

如果我们在说C字符串,那么您的函数应该是

void reverse(char word[],size_t wordlen)

相同问题的第一个答案(这是从C中的反向句子造句?

这并不能满足您的需求,但可以使您更加亲密!

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

            return 1;
         }

归功于@devinb。

//此程序可帮助您查找数组中的最大和最小数目

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM