C++删除char中每个x的x字节

标签 c++ winapi byte

<分区>

您好,对于我的应用程序,我需要删除 char 数组中每个 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 谢谢

最佳答案

@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 索引保证不大于 siif 条件可以修改为在数组中保留元素所需的任何条件。

注意:为了完全迂腐,索引和长度应为 size_t 类型,以便可以处理任何大小的数组。我使用 int 只是为了让事情变得简单。

关于C++删除char中每个x的x字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16737502/

相关文章:

c++ - 如何确保作为模板参数传递的函数类型不修改参数?

c++ - CMake 图形用户界面 : Specify library path for Windows

c++ - Win32 : More "object oriented" window message handling system

java - Java(字节)文字转换效率高吗?

android - 从 byte[] 中读取 EXIF 数据

c++ - 一个 "attach"代码如何用于嵌入式技术?(例如,将计算器程序附加到计算器。)

C++自动构造函数调用

c++ - 如何在 winapi C++ 上创建一些基本控件,如列表框

C++ 位图每像素位

c# - 无法将 int 转换为 byte