【问题标题】:Trimming a char array in C在C中修剪char数组
【发布时间】:2013-02-23 03:28:28
【问题描述】:

我正在处理一项作业,但我注意到我的编码作业存在问题。我不清楚如何解决这个问题,可能是因为睡眠不足,但无论如何。我需要为这个分配修剪一个包含空格的 char 数组。

我想到的解决方案涉及第二个 char 数组,只需将非空格复制到该数组即可。但是我如何在不知道它的大小的情况下创建一个 char 数组,因为那时我还不知道它的大小。我仍然需要修剪它才能知道需要将多少个字符复制到新数组中,这在分配中会有所不同

我知道这里有很多关于 stackoverflow 的好问题,但我认为这更多地与思考过程有关,而不是正确的语法。

我的第二个问题是如何在 char 数组上执行 fscanf/fgetc,因为它需要一个流,给它一个指针而不是一个流就足够了吗?

【问题讨论】:

  • C 风格的字符串由 \0 字符终止,因此即使您使新数组与原始数组一样大,您也可以将剩余字节清零
  • 好吧,如果我理解的话。只需创建一个新的 char 数组,当我完成读取原始 char 数组时,我只需用 \0? 关闭它
  • 第一个问题,请使用stackoverflow.com/questions/122616/…
  • @GeneArboit 您所做的编辑应该是实质性的,并且应该解决帖子的多个问题。不鼓励进行少量修改。
  • 需要使用fscanf/fgetc吗?

标签: c scanf arrays trim


【解决方案1】:

如果简单地进行就地更改,则将每个字符移回一个空格,然后重复直到数组末尾。这是非常低效的。

如果要创建一个新副本,请创建一个长度相同的新数组,然后照常进行(复制所有非空格字符)。如果您也复制\0 字符,则不会出现字符串终止问题。这样效率更高。


按照您的 cmets,您似乎可以选择以您希望的任何形式输入数组。然后,我建议不要稍后再进行文本操作,只需以您需要的形式输入字符串即可。

您可以简单地重复使用scanffscanf,将单独的单词输入到同一个数组中。这将处理所有空格。

【讨论】:

  • @KiptScriddy \0 不是 0 :)
  • @Mehrdad '\0' == 0'\0' != '0'
  • @AshRj:是的,我知道,我认为 Kipt 也明白这一点 :)
  • 奇怪的是,我发送了一个 1 衬里,但当我修剪它时,它在最后打印了一个额外的零。
  • @KiptScriddy 您可能添加了一个额外的零而不是 NULL
【解决方案2】:

这是一个部分想法:您可以对 char 数组进行第一次传递并计算空格,然后将字符串长度减去第二个数组的空格,然后跳过空格执行复制。

您还可以通过数组创建一个传递:

测试直到数组结束:

我的(当前/索引)位置是空白的吗? (一个空格)

如果是这样,请获取下一个可用的非空白值并将其放在那里。

然后索引++

如果没有,索引++

不确定第二个,会做一些检查,看看我是否也能找到一个好的答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多