我有一个带有2个“配对”整数数组newNumerator []和newDenominator []的程序,它们都有9个整数。我编写了一个按升序对它们进行排序的函数,但是我不确定它是否正常工作,因为我还没有成功编译它。我也有一些类型转换的问题。这是函数定义 -
void sortData(int *newNumerator[], int *newDenominator[], int newSize)
{
int temp1;
int temp2;
bool swap;
int count = 0;
double percentageLeft = 100.0 * static_cast<double>(newNumerator[count]) / newDenominator[count];
double percentageRight = 100.0 * static_cast<double>(newNumerator[count + 1]) / newDenominator[count + 1];
do
{ swap = false;
for(count = 0; count < (newSize - 1); count++)
{
if(percentageLeft > percentageRight)
{
temp1 = *newNumerator[count];
*newNumerator[count] = *newNumerator[count + 1];
*newNumerator[count + 1] = temp1;
temp2 = *newDenominator[count];
*newDenominator[count] = *newDenominator[count + 1];
*newDenominator[count + 1] = temp2;
swap = true;
}
}
} while (swap);
}
我遇到的类型转换问题是使用percentageLeft和percentageRight,因为newNumerator []和newDenominator []是整数指针,但要获得它们的“百分比”,我需要它是一个双精度型。不知道该怎么做。基本上我只需要弄清楚如何解决这个问题,并知道我的功能是否达到了它的目的。任何帮助表示赞赏,如果有什么我可以进一步澄清,请告诉我
答案 0 :(得分:2)
我建议使用STL进行排序。使事情变得更简单,更容易理解。
#include <vector>
#include <algorithm>
struct Ratio
{
int numerator;
int denominator;
double toDouble() const
{
return static_cast<double>(numerator)
/ static_cast<double>(denominator);
}
bool operator < (Ratio const& other) const
{
return toDouble() < other.toDouble();
}
};
void main()
{
std::vector<Ratio> ratios = { {1, 2}, {5, 7}, {2, 11} };
std::sort(ratios.begin(), ratios.end());
}
处理原始数组并手动排序几乎总是更乏味且容易出错的方法。
请参阅http://en.cppreference.com/w/cpp/algorithm/sort和http://en.cppreference.com/w/cpp/container/vector以供参考
答案 1 :(得分:1)
你说:
我有一个带有2个“配对”整数数组newNumerator []和newDenominator []
的程序
然而,您的功能定义为:
When I create < row >
| < name > |
| < height > |
| < eyecolor > |
| < code > |
Then I should receive a code of < code >
Examples:
| name | height | eyecolor | code |
| Bob | 5'2" | green | 200 |
| Ted | 4'9" | blue | 200 |
我认为应该是:
void sortData(int *newNumerator[], int *newDenominator[], int newSize)
如果情况确实如此,则行:
void sortData(int newNumerator[], int newDenominator[], int newSize)
需要:
temp1 = *newNumerator[count];
*newNumerator[count] = *newNumerator[count + 1];
*newNumerator[count + 1] = temp1;
temp2 = *newDenominator[count];
*newDenominator[count] = *newDenominator[count + 1];
*newDenominator[count + 1] = temp2;
答案 2 :(得分:1)
您遇到的主要错误是您向b.size()
提供了错误的值。稍后你通过解除引用正确使用它们,但在演员表中你缺少它。
您需要的是:
static_cast<>
添加括号以明确说明解除引用的内容。
此外,如果您不是更改实际的数组指针,而只是更改数组的内容,则可以完全删除解除引用的麻烦。如果将函数定义为
double percentageLeft = 100.0 * static_cast<double>((*newNumerator)[count]) / *newDenominator[count];
double percentageRight = 100.0 * static_cast<double>((*newNumerator)[count + 1]) / *newDenominator[count + 1];
每次使用时都可以使用普通索引而无需解除引用。