我有一个家庭作业,我应该创建一个数组并使用指针实现冒泡排序算法。我创建了数组,但是如果我想输入3
元素,即如果用户输入n = 3,则程序不允许我输入第三个数字。我想问为什么会这样?
提前致谢。
#include <iostream>
using namespace std;
int *n = new int ;
int main()
{
cout<<"Vavedete broya na chislata:"<<' ';
cin>>*n;
int *arr = new int[*n];
cout<<"Vavedete elementite:"<<endl;
int *i=new int;
for(*i=0; *i<*n; *i++)
{
cin>>*(arr+*i);
}
return 0;
}
答案 0 :(得分:0)
后缀增量的优先级高于间接运算符,因此在循环中需要编写++*i
,当前实现在第二次迭代*i
中包含一个垃圾,因此你写入不预定的位置。您可以检查优先级表here。
此外,有充分的理由使用前缀增量,因为当您开始使用迭代器时,您将避免创建临时对象。
答案 1 :(得分:0)
“*”和“++”运算符都具有相同的优先级,但关联性是从右到左。您正在取消引用未在循环中使用的i ++。 尝试:
#include <iostream>
using namespace std;
int *n = new int ;
int main()
{
cout<<"Vavedete broya na chislata:"<<' ';
cin>>*n;
int *arr = new int[*n];
cout<<"Vavedete elementite:"<<endl;
int *i=new int;
for(*i=0; *i<*n; (*i)++)
{
cin>>*(arr+*i);
}
return 0;
}
答案 2 :(得分:0)
在你的for循环中你应该把括号(* i)++,因为当你写* i ++首先你增加i的地址然后得到它的值
const letters = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
function getNumbersAndLettersFromString(stringInput) {
const chars = string.split('');
chars.reduce((acc, curr) => {
if (letters.includes(curr)) {
return {
...acc,
letters: [
....acc.letters,
curr,
]
};
}
if (numbers.includes(curr)) {
return {
...acc,
numbers: [
....acc.numbers,
curr,
]
};
}
}, {letters: [], numbers: []})
}