【问题标题】:Remove identical, consecutive lines in a char array in C在C中的char数组中删除相同的连续行
【发布时间】:2018-10-06 13:03:04
【问题描述】:

我正在尝试创建一个函数,该函数将检测 char 数组中是否存在相同的连续行。

例如,如果一个 char 数组包含:

你好

你好

你好

你好

那么数组会变成

你好

本质上,我想检测连续的、相同的行,然后删除它们,这样就只剩下一行了。如果一行与前一行相同,但它们不是连续的,那没关系。

真的,整行不必相同,但至少前 79 个或 MAXCHARS 必须相同。

此外,我不想通过写入中间文件来做到这一点。理想情况下,我会将数据存储在数组中。

我在想这样的事情:

    int deleteRepeats(char *a)
 {
         int i;
          for (i=0; i<=MAXCHARS; i++) {
          if (a[i] != '\n')
              /* copy into new array /*
        }
 }

但我有点迷路了。我现在不想打印数组,因为稍后我将在我的程序中再次更改它;我仍然需要使用一个。

非常感谢任何帮助/解决方案。谢谢。

【问题讨论】:

  • 1.您要检测还是删除? 2. 您想要就地更改还是在单独的结果中进行更改? 3. 为什么你认为输入字符串最多只能有 MAXCHARS 个字符/八位字节? 4. 你假设字符串是美国 ASCII 字符集中的吗?
  • 1.移动。 2. 理想情况下,更改将保留在 a 中,因为我稍后会使用它,所以我想很多不合时宜的内容会被转移。 3. 整体指令请求只需要担心 MAXCHARS 4. 是

标签: c arrays string duplicates


【解决方案1】:

一些指导:

  • 您最多只能将每个字符复制一次 - 向后复制到其目的地。无需额外的副本。
  • 您将在数组中有一个“最终确定到此处”的位置和一个“正在处理/读取”的位置。
  • 跟踪当前可能重复的整行,并将每个新行与其匹配以检查它是否是重复的。
  • 按整行而不是按字符前进 - 查找下一个行尾时除外。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 2020-08-31
    • 1970-01-01
    • 2023-03-03
    • 2021-02-22
    相关资源
    最近更新 更多