作为我的作业,我正在编写一个程序,该程序应该使用 bool 函数检查 char 数组并删除数组中返回 true 的所有字符。问题是我不允许使用索引(也不允许任何类型的 int 和库)。我写了一个代码来移动我的数组,但它太慢了。 如果有人能指出我更快的方法,我将不胜感激。
bool filter(char* array, bool(*function)(char))
{
if(array)
{
char *start = array;
while(*(array) != 0)
{
if(function(*array) == false)
{
start++;
array++;
}
else
{
while(*(array) != 0)
{
*(array) = *(array + 1);
array++;
}
*(array) = 0;
tablica = start;
}
}
}
}
期待您的回复。
最佳答案
您不需要每次删除一个字符时都重新移位整个数组。在进行复制时,只需记录当前的往返位置即可。只要不可能将元素添加回数组,就不会覆盖任何内容:
bool filter(char* array, bool(*function)(char)){
if(array){
char *start = array;
while(*(array) != 0){
if(function(*array) == false){
*start = *array;
start++;
}
array++
}
*start = '\0';
}
return true;
}
关于C - 在不使用 int 的情况下移动数组的更快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20412342/