【问题标题】:Octave - strcat() not trimming trailing whitespace when called with a single argumentOctave - strcat() 在使用单个参数调用时不修剪尾随空格
【发布时间】:2016-09-14 19:52:39
【问题描述】:

为什么只有一个参数的strcat() 无法修剪尾随空格?

我正在尝试使用 strcat() 来修剪字符数组中的尾随空格:

s = "cheese   ";
s = strcat(s);

但这会返回s = "cheese ",即空白没有变化。如果我在 strcat() 中添加第二个参数,例如 s = strcat(s, ""); 现在是 s = "cheese"

我正在这样做,而不是调用 strtrim(),因为这是 zyBooks 教科书明确要求我们为单个字符串完成此任务的方式——他们的示例显示 strcat() 以这种方式使用。我在看什么?

【问题讨论】:

  • 看起来这是as staded in the reference 的预期行为。我想知道为什么使用 strtrim(s) 是不好的,因为函数就是为此而设计的。
  • 我不确定后者;他们根本没有提到它。至于前者,它在哪里声明单个单元格字符串的尾随空格被保留? “在连接字符串之前消除任何字符串输入的尾随空格”是否暗示?
  • strcat 在 Matlab 和 Octave 中的行为不同。 strcat 目的是连接(不是修剪)。
  • @apraetor 在我上面发布的链接中,上面写着:“请注意,单元格字符串值有空格修剪”。也许我在那里的英语或八度音阶词汇有问题,但我理解的文档如下:如果strcat 被赋予单元格字符串s 作为输入,它的行为将如你所料,但如果你给它单个单元格字符串,它不会修剪空格。
  • @ThomasWilmotte "cell string values" 是复数,但我理解你的意思;这是英语模棱两可的情况之一。如果这些示例包含一个单参数案例,那就更清楚了。

标签: matlab octave


【解决方案1】:

您的代码确实在 Matlab 中删除了尾随空格,但在 Octave 中没有。有时会发生这种情况:Octave 的功能或多或少类似于 Matlab 的功能,但有一些区别。有时这些差异是无意的,有时则不是。

在这种情况下,我认为您遇到的行为是 Octave 函数中的错误,因为它的 documentation

任何字符串输入的尾随空格在字符串连接之前被消除。

当有单个字符串作为输入时,这不是它正在做的事情。

【讨论】:

  • 实际上,经过仔细检查(以及后见之明),我认为文档的作者知道他们的意思,但没有说清楚:他们写了“strcat(s1,s2, ...)”,在 Matlab 文档中显示为“strcat(s1, ...)”。谢谢你的回答。
  • 如果您可以确认strcat ('foo ') 在matlab 中返回'foo',您应该在savannah 上提交错误报告savannah.gnu.org/bugs/?func=additem&group=octave 请使用项目组“Matlab 兼容性”。谢谢
  • @Andy 是的,我可以确认(在 Matlab R2015b 上测试)。 apraetor,你能提交错误报告吗(如果你认为合适的话)?
  • 伙计们,你们行动得很快,我上床睡觉,醒来就发现了这一切。谢谢!
【解决方案2】:

几个小时后This Bug was reported on savannahfixed on the default branch

您可以等待包含此更改的下一个版本,或者只需下载 strcat.m from the mercurial repo 并在您的 Octave 安装中替换 strcat.m。

【讨论】:

  • 哇,我的第一个真正的错误!现在我希望我没有在答案上跳枪! (指向默认分支的链接对我不起作用)
  • 看起来 gnu 服务器 (hg.sv.gnu.org/hgweb) 目前有一些问题... 请过几个小时再试
猜你喜欢
  • 2014-05-07
  • 2012-06-22
  • 2010-11-26
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
  • 1970-01-01
  • 2013-12-19
  • 1970-01-01
相关资源
最近更新 更多