c++将数组元素向左移位
c++ shift array elements to left
我最近才开始学习C++,并且很难移动数组元素来移除空/空元素
char *aBlock;
aBlock = new char[100];
int main(int argc, char **argv)
{
aBlock[20] = 'a'; // fill array with test data.
aBlock[10] = 's';
aBlock[30] = 'd'; // Excepted output: This test data should be shifted to the start of array
// Consider aBlock contains data, with random empty elements
for(int i=1; i <= aBlock.length(); i++) {
if(aBlock[i-1] == 0) {
aBlock[i-1] = aBlock[i];
aBlock[i] = 0;
}
}
return 0;
}
编辑:修复了一个代码拼写错误&变量名错误,已将"=="更改为"="。它仍然没有按预期工作。
如果我理解正确,您希望移动数组开头的非零元素。您可以使用std::remove_if
来执行此操作,并将其余元素设置为0。
std::fill(
std::remove_if(std::begin(aBlock), std::end(aBlock), [](char const c) {return c == ' '; }),
std::end(aBlock),
0);
更新:
由于数组是动态分配的,您需要进行一个小的更改:
std::fill(
std::remove_if(&aBlock[0], &aBlock[100], [](char const c) {return c == ' '; }),
&aBlock[100],
0);
运算符==
检查相等性,必须使用=
进行赋值。
memBlock[i-1] = memBlock[i];
C++中的数组没有任何类似.length()
的成员。它们不是阶级。
for(int i=1; i <= 100; i++)
^^^
如果您在编译时知道大小,请使用std::array(如果可用(。然后你可以做".size((":(此外,如果你有几个连续的零,你的代码就不起作用了。每个元素最多向左移动一次,这显然不足以达到你想要的结果。你需要做的是跟踪一个单独的"输出"索引/迭代器,它接收你遇到的任何非零值,然后递增:
std::array<char, 100> aBlock;
aBlock[10] = 's';
aBlock[20] = 'a';
aBlock[30] = 'd';
auto output = aBlock.begin(); // or aBlock if you don't have std::array;
for (auto input = aBlock.begin(); input != aBlock.end(); ++input)
{
if (*input != 0)
{
if (output != input)
{
*output = input;
*input = 0;
}
++output;
}
}
这就行了。
int arrsize = 100;
...
int i, j;
for(i = 0, j = 0; i < arrsize ; i++) {
if(memBlock[i] != 0 && i != j) {
memBlock[j++] = memBlock[i];
memBlock[i] = 0;
}
}
旁注:全球空间的新事物?delete[]在哪里?
更改
memBlock[i-1] == memBlock[i];
至
memBlock[i-1] = memBlock[i];
"=="是我认为的问题
使用
if(aBlock[i-1] != 0)
相关文章:
- 数组元素打印的递归方法
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 为什么使用数组元素查找最大数字的程序不起作用?
- 数组元素更改值?
- 如何访问宏中定义的数组元素
- 将数组元素递增 1
- C++函数,它将数组、谓词和运算符作为参数,并将运算符应用于满足谓词的数组元素
- 存储指向动态数组元素的指针
- C++通过别名指针以静默方式将错误的类型分配给数组元素
- 在 std::map 中插入数组元素
- 使用指针访问数组元素时出现意外结果
- c++ 使用动态分配运算符反向数组元素
- 为什么在 c++ 中分配 char 数组元素时,分配的字符会被销毁?
- 缺少数组元素问题
- 如何在类中制作 2D 数组元素,然后在其构造函数中指定其维度?
- 创建一个函数来转换数组元素的类型并返回数组的地址
- 删除在结构 c++ 中声明的数组元素
- 添加数组元素:需要左键作为赋值的左操作数
- Codechef:从数组元素中移除成对的公共因子,并找到最小乘积.为什么回答错误
- c++将数组元素向左移位