【问题标题】:C++ void reverse functionC++ void 反向函数
【发布时间】:2015-04-10 01:06:17
【问题描述】:

我们正在将基数 10 转换为不同基数 (B) 的数字。我在使用 void reverse 函数时遇到问题,它不会颠倒数字的顺序。

 string convertToBaseB(int num, int b){
int digit;
stringstream answer;
string x="";
    while(num>0){
    digit=num%b;
    num/=b;
    answer<<digit;
}
    return answer.str();}

void reverse(int x[],int size){//reversing the 

for(int k=0; k<size/2; k++){
    int temp=x[k];
    x[k]=x[size-k-1];
    x[size-k-1]=temp;}
}

【问题讨论】:

  • 您的意见是什么?你的输出是什么?你的预期输出是什么? convertToBaseB(...) 函数与您提出的问题有什么关系?
  • 输入是一个以 10 为底的数字,它应该转换为具有不同基数的新数字...... void reverse 函数应该交换转换输出的顺序以 b 定义为基础...
  • 这仍然不能告诉我们您要反转的输入是什么......您传入的 x 和 size 的值是多少?
  • 我可以几乎但不能完全说出你在问什么。以非常清晰的方式提出您的问题将得到帮助。请参阅stackoverflow.com/help/how-to-ask 了解更多信息。

标签: c++ c++11 numeric-conversion


【解决方案1】:

您的反向功能工作正常。但是在我看来,它不像 C++……在 C++ 中,我将有一个向量并执行以下操作:

std::vector<int> arr;
//... fill arr
std::swap_ranges(&arr[0], &arr[arr.size()/2], arr.rbegin());

如果你想坚持你的 for 循环,至少像这样使用 std::swap

void reverse(int x[],int size) { 
    for(int k=0; k<size/2; k++)
        std::swap(x[k], x[size-k-1]);
}

【讨论】:

  • 既然有std::reverse,为什么还要这样滥用std::swap_ranges
【解决方案2】:

为我工作:

#include <iostream>

using namespace std;

void reverse(int x[],int size)
{

  for(int k=0; k<size/2; k++)
  {
    int temp=x[k];
    x[k]=x[size-k-1];
    x[size-k-1]=temp;
  }
}

int main()
{
  const int sz = 9;
  int* digits;

  digits = new int[sz];

  for (int i=0; i < sz; ++i)
  {
    digits[i] = i;
  }

  reverse(digits, sz);

  for (int i=0; i < sz; ++i)
  {
    cout<<digits[i]<<" ";
  }
  cout<<endl;
}

【讨论】:

  • 这应该是一条评论。如果您想展示有效的示例代码,请添加指向 ideone.com 的链接。
  • 不必要地使用new
  • 通常避免只使用代码的答案。考虑添加有助于解释代码的description“为我工作” 遗憾的是不适合。谢谢
  • 感谢您对未来 cmets/贡献的指导。
猜你喜欢
  • 2018-04-19
  • 1970-01-01
  • 1970-01-01
  • 2017-07-13
  • 2017-11-19
  • 1970-01-01
  • 2016-08-28
  • 2013-07-05
  • 1970-01-01
相关资源
最近更新 更多