【问题标题】:MATLAB - Only First Letter of String is PrintingMATLAB - 仅打印字符串的第一个字母
【发布时间】:2013-05-31 15:11:15
【问题描述】:

我在使用 fprtinf 命令(和 sprintf)在 MATLAB (2012a) 中打印字符串时遇到问题。

我有一个包含 12 个日期(数字)的数组。我正在使用以下命令将它们转换为字符串:

months = datestr(data(:,1)-365,12); %Mar13 format

当我调用months 变量时,我获得了以下(和期望的)输出:

12 日
2月12日
3 月 12 日
4月12日
等等。

问题是当我调用fprintfsprintf 时,请使用以下代码:

fprintf('%s', months(1))

我只会得到月份的第一个字母,而不是完整的字符串。知道如何让它打印完整的字符串吗?

谢谢!

【问题讨论】:

    标签: string matlab date printf


    【解决方案1】:

    months 变量的结果数据类型是 NxM 字符数组。您需要将其作为字符串元胞数组进行处理。

    dates = num2cell(data(:,1)-365)
    months = cellfun(@(x) datestr(x,12),dates,'UniformOutput',false)
    fprintf('%s', months{1})
    

    应该得到你想要的。

    【讨论】:

    • 这行得通。非常感谢您的解释,没有意识到它是一个字符数组,以前没有处理过。谢谢!
    【解决方案2】:

    只需将您的呼叫更改为

    fprintf('%s', months(1, :))
    

    datestr 在单独的行中返回每个提供日期的字符串。

    或者,您可以使用cellstr 函数将结果转换为元胞数组(这也适用于非固定长度的日期格式,例如'dddd'

    months = cellstr(months);
    fprintf('%s', months{1});
    

    【讨论】:

    • 也有效,感谢您的快速回复。将相应地调整我的代码。
    • 嘿,看起来我们的解决方案执行了相反的操作顺序。 :)
    猜你喜欢
    • 2021-05-11
    • 2013-02-08
    • 2022-08-23
    • 2015-08-15
    • 1970-01-01
    • 2012-11-20
    • 2022-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多