您好我的应用程序我需要删除char数组evry X字节上的空字节,如:
char a[] = "\x0B8\x0B8\x0B8\x0B8\x00\x0B8\x0B8\x0B8\x0B8\x00\x0B8\x0B8\x0B8\x0B8\x00\x0B8\x0B8\x0B8\x0B8\x00\x0B8\x0B8\x0B8\x0B8\x00\x0B8\x0B8\x0B8\x00\x00"
需要
char a[] = "\xB8\xB8\xB8\xB8\xB8\xB8\xB8\xB8\xB8\xB8\xB8\xB8\xB8\xB8\xB8\xB8\xB8\xB8\xB8\xB8\xB8\xB8\xB8";
我需要一个没有std的功能只需WINAPI谢谢
答案 0 :(得分:2)
@Jerry Coffin描述了这种一般问题的惯用解决方案。
您需要就地扫描和修改数组,从左向右扫描,保留或删除元素,同时跟踪源(输入)索引和目标(输出)索引。由于这会扫描数组的每个元素一次,因此它是一个O( n )算法。
例如:
// Remove all '\x00' elements from an array
int remove_zeros(char a[], int len)
{
int si; // Source index
int di; // Destination index
// Scan the array from left to right, removing '\x00' elements
di = 0;
for (si = 0; si < len; si++)
{
if (a[si] != '\x00')
a[di++] = a[si]; // Keep/move the element
// Otherwise skip/remove the element
}
return di; // Resulting length of the modified array
}
随着循环的进行,di
索引保证不会大于si
。可以将if
条件修改为保留数组中元素所需的任何条件。
注意:要完全迂腐,索引和长度应为size_t
类型,以便可以处理任何大小的数组。我使用int
只是为了简单起见。
答案 1 :(得分:1)
一种显而易见的方法是从头到尾遍历数组,跟踪两点:“输入”和“输出”。两者将以相同的方式(数组的开头)开始,但每次遇到结果中不需要的字节时,您都会将输入移动到下一个字节,但只保留输出。当您遇到要保留的字节时,您将从输入点复制到输出点,然后更新它们以指向下一个字节。