我试图让这个程序从用户那里获取一个元素,然后由用户将它插入到make数组中(数组必须被排序) 但它没有正常工作
例如: 一个[4]
a[0]=1
a[1]=3
a[2]=5
a[3]=7
然后我插入>> 6
然后它就像这样
a[0]=1
a[1]=3
a[2]=5
a[3]=6
a[4]=3866936
数组最多可以包含100个元素
:|
这是一本书中的练习
#include<iostream>
#include<windows.h>
using namespace std;
void insert(int[], int&, int);
int main()
{
const int maxsize = 100;
int a[maxsize];
cout << "build ur array\n"; Sleep(650);
cout << "Enter the number of elements:";
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
cout << "a[" << i << "]=";
cin >> a[i];
}
int k;
cout << "Enter a new element:";
cin >> k;
n++;
insert(a, n, k);
for (int i = 0; i < n; i++)
cout << "a[" << i << "]=" << a[i] << endl;
system("pause");
}
void insert(int a[], int& n, int x)
{
for (int i = n - 1; a[i]>x; i--)
a[i] = a[i + 1];
for (int i = n; i <= n; i--)
{
if (x >= a[i])
{
a[i + 1] = x;
break;
}
}
答案 0 :(得分:3)
假设你知道你在做什么。没有人可以输入超过99,假设您将检查该值是否小于100,您在插入中只有一个错误:
a[i] = a[i+1];
应该是
a[i+1] = a[i];
完整的功能应该像这样适用于所有可能的情况:
void insert(int a[], int& n, int x)
{
for (int i = n - 2; a[i]>x && i >= 0; i--)
a[i+1] = a[i];
for (int i = n-2; i >= 0; i--)
{
if (x >= a[i])
{
a[i + 1] = x;
return;
}
}
a[0] = x;
}
答案 1 :(得分:2)
由于您正在从数组边界(0 - 3
)外部读取,因此您遇到了未定义的行为。您应该使用std::vector
来表示动态大小的数组:
std::vector<int> vec;
vec.push_back(1);
vec.push_back(3);
vec.push_back(5);
vec.push_back(7);
然后:
vec.push_back(6);
稍后,如果您想对阵列进行排序,您可以这样做:
std::sort(vec.begin(), vec.end());
答案 2 :(得分:0)
使用STL的一些内容,您可以使用以下内容:
class SortedVector
{
public:
using const_iterator = std::vector<int>::const_iterator;
void insert(int value) {
auto it = std::lower_bound(v.begin(), v.end(), value);
v.insert(it, value);
}
const_iterator begin() const { return v.begin(); }
const_iterator end() const { return v.end(); }
private:
std::vector<int> v;
};
std::vector
是容器。std::lower_bound
找到要插入的位置(插入方式仍然有序)std::vector::insert
执行插入(元素移位)。如果您不想使用std :: vector和我们的C-array:您可以使用:
void insert(int a[], int& n, int x)
{
auto it = std::lower_bound(a, a + n, x);
std::copy(it, a + n, it + 1);
*it = x;
++n;
}
答案 3 :(得分:0)
你只需要记住数组的索引从0开始。当你想要4个元素数组int tab[4]
时,你可以使用0到3 tab[0], tab[1], tab[2], tab[3]
的索引来读/写元素值。元素tab[4]
不是你的数组的一部分,当你想从你的这个地方读取元素时,你将获得已存在的值(你可以将它视为不可预测的随机值,但它不是真正的随机值)。
顺便问一下,你的问题是关于C语言。如果您使用的是C ++,请阅读std::array
,std::vector
等容器
答案 4 :(得分:0)
&GT; 在prajmus的帮助下 我解决了这个问题 :
#include<iostream>
#include<windows.h>
using namespace std;
void insert(int[], int&, int);
int main()
{
const int maxsize = 100;
int a[maxsize];
cout << "build ur array\n"; Sleep(650);
cout << "Enter the number of elements:";
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
cout << "a[" << i << "]=";
cin >> a[i];
}
int k;
cout << "Enter a new element:";
cin >> k;
n++;
insert(a, n, k);
for (int i = 0; i < n; i++)
cout << "a[" << i << "]=" << a[i] << endl;
system("pause");
}
void insert(int a[], int& n, int x)
{
for (int i = n - 2; a[i]>x; i--)
a[i+1] = a[i];
for (int i = n-1; i <= n; i--)
{
if (x >= a[i])
{ a[i + 1] = x;
break;
}
}
}