我一直关注Alex Allain的书,以便对C ++有一个很好的理解。我已经知道了一些基础知识,但是我一直都在使用数组和排序算法。 无论如何,他提出的问题之一是检查数组是否排序。如果不是,请将其排序...... 这是代码:
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;
void swap(int array[], int firstindex, int secondindex);
int findsmallel(int array[], int size, int index)
{
int indexofsmall=index;
for(int i=index+1; i<size; i++)
{
if(array[i]<array[indexofsmall])
{
indexofsmall=i;
}
}
return indexofsmall;
}
int findhigh(int array[], int size, int index)
{
int indexofhigh=index;
for(int i=index+1; i<size; i++)
{
if(array[i]>array[indexofhigh])
{
indexofhigh=i;
}
}
return indexofhigh;
}
void sortlow(int array[], int size)
{
for (int i=0; i<size; i++)
{
int index=findsmallel(array, size, i);
swap(array, index, i);
}
}
void sorthigh(int array[], int size)
{
for (int i=0; i<size; i++)
{
int index=findhigh(array, size, i);
swap(array, index, i);
}
}
void swap(int array[], int firstindex, int secondindex)
{
int temp=array[firstindex];
array[firstindex]=array[secondindex];
array[secondindex]=temp;
}
void displayarray(int array[], int size)
{
cout<<"{ ";
for(int i=0; i<size;i++)
{
if(i!=0)
{
cout<<", ";
}
cout<<array[i];
}
cout<<" }";
}
int main()
{
int inputedarray[5];
cin>>inputedarray[];
if(inputedarray[4] != sortlow || inputedarray[4] != sorthigh)
{
sortlow(inputedarray, 5);
displayarray(inputedarray, 5);
}
else
cout<<"Array is already sorted."<<endl;
return 0;
}
检查条件时,获取有关指针和整数之间比较的两个错误。任何帮助将不胜感激! 编辑:我得到的错误是: C:\ Code Block Projects \ Alex Allains Book \ Chapter 1 \ main.cpp | 84 | error:ISO C ++禁止指针和整数之间的比较[-fpermissive] |
以任何方式检查并查看阵列是否已排序?请? :(
答案 0 :(得分:3)
我认为它的main
的第三行正在进行比较:检查数组的最后一个元素是否是最小/最大的,以确定数组是否已排序。虽然这不是正确的方法,但我们假设它正在这样做。从
if(inputedarray[4] != sortlow || inputedarray[4] != sorthigh)
到
if(inputedarray[4] != findsmallel(inputedarray,5,0) ||
inputedarray[4] != findhigh(inputedarray,5,0))
然后你应该能够编译你的代码。
让您的代码正常运行。修改main如下:
int main()
{
int inputedarray[5];
for( int i=0; i<5; i++)
{
cin>>inputedarray[i];
}
if(inputedarray[4] != findsmallel(inputedarray,5,0) ||
inputedarray[4] != findhigh(inputedarray,5,0))
{
sortlow(inputedarray, 5);
displayarray(inputedarray, 5);
}
else
cout<<"Array is already sorted."<<endl;
return 0;
}
然后你应该像这样输入你的整数
2 3 5 1 4
除非你把最大/最小整数作为最后一个输入数字,否则应该可以正常工作。
答案 1 :(得分:1)
&#34;错误&#34;你得到的是因为你正在将值与函数指针进行比较。你没有调用这些功能。
正如kma所说,你不能在表达式中使用这些函数调用,因为它们返回void
,即根本不返回值。
即使确实返回了某些内容,第一次调用也可以重新排列数组,因此在下一次比较中,数组索引4的前一次调用将不同。
答案 2 :(得分:0)
主程序中的sortlow和sorthigh不是声明的int变量,而是函数名称。 C ++将其作为函数的指针(地址)。但是你将它们与数组中的整数进行比较。
编辑:如何检查数组是否已排序? 想象一下,你面前有一排5张牌(来自正常的牌组)。你一次只能翻两张牌并进行比较并将它们面朝下放回去。你如何确定5张卡是否正常?记下你采取的步骤。一旦你弄明白了这个算法,你就可以开始思考如何用C ++代码来表达它。