【问题标题】:How to use sprintf/fprintf to print a string inside a cell array in matlab?如何使用 sprintf/fprintf 在 matlab 的单元格数组中打印字符串?
【发布时间】:2015-02-22 21:16:29
【问题描述】:

我想知道是否可以使用 sprintf 或 fprintf 将某些内容打印到元胞数组。

在一个结构A我有

A.labels = {'A' 'B' 'C' 'D'}

我有一个字符串/单元格数组

B = {'E' 'F' 'G' 'H'}

我想打印成我想要的新结构C

C.labels = {'A-E', 'B-F', 'C-G', 'E-H'}

在下面的代码中,我只是想检查如何执行第一个条目,然后一旦我弄清楚我可以自己完成其余的工作。

C(1).labels = fprintf('%s -%s',B{1},A(1).labels);

但这并不能胜任。我该如何解决这个问题?

【问题讨论】:

  • @knedlsepp 感谢您的编辑.. 抱歉,如果阅读起来很烦人!

标签: arrays string matlab printf cell-array


【解决方案1】:

如果你输入help fprintf,它会说:

fprintf - 将数据写入文本文件

但是你想要help sprintf:

sprintf - 将数据格式化为字符串

因此您可以使用以下方法解决您的问题:

C.labels = cellfun(@(x,y) sprintf('%s-%s',x,y), A.labels, B, 'uni',0)

这使用:cellfun 获取对应的 A.labelsB 对,并将其提供给使用 sprintf 的函数 @(x,y) sprintf('%s-%s',x,y)

当然,您也可以使用常规的for 循环。我还想补充一点,您目前拥有的是一个结构,其中包含一个长度为四的 cell-entry,而不是四个结构,每个结构都有一个条目。

【讨论】:

  • 啊谢谢..我以前不知道这个cellfun..谢谢。
  • @MaheenSiddiqui:您可以使用for 循环而不是cellfun。这里最重要的修复是,您需要使用sprintf 而不是fprintf
  • @knedlsepp - 你考虑过使用sprintfc吗?这是一个未记录的函数:undocumentedmatlab.com/blog/…
  • @rayryeng:从未听说过。我想在这种情况下strcat 就足够了。所以这基本上是cellfun+sprintf 用于单个单元阵列?
  • 差不多!您还没有听说过它,因为它毕竟是无证的 :) 哈哈。 sprintfc 是一个非常强大的功能。它本质上是获取数据并将其转换为条目的单元数组。已经证明它比使用cellfununi=0. 快得多
【解决方案2】:

这可以通过strcat 非常简单地完成:

C.labels = strcat(A.labels, '-', B);

【讨论】:

  • 哈。就在我写关于strcat 的评论时,你出现了。 :-D
  • 其实我早 13 秒就出现了 :-P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多