【问题标题】:How to display a string in a certain format如何以某种格式显示字符串
【发布时间】:2015-10-10 20:41:35
【问题描述】:

我正在编写一个程序,它将矩阵的特定行输出到命令窗口。但是,我需要以特定格式显示它,如下所示:

行:[2 4 6 8 10]

它应该显示以下内容:

1 (2%)

2 (4%)

3 (6%)

4 (8%)

5 (10%)

而不仅仅是像往常一样在命令提示符下回答。有谁知道在 MATLAB 中执行此操作的方法?非常感谢你。再一次,我的计算是正确的,我只是不知道用什么工具来格式化它。

【问题讨论】:

    标签: matlab formatting format string-formatting


    【解决方案1】:

    您可以使用arrayfun 循环遍历数组中的每个元素,然后使用sprintf 对其进行正确格式化。您具体需要的格式是

    sprintf('%d (%d%%)\n\n', x, y)
    

    其中x 是前导值,y 是括号内的值。然后使用arrayfun 我们有

    >> cell2mat(arrayfun(@(x, y) sprintf('%d (%d%%)\n\n', x, y), 1:numel(rowc), rowc, 'UniformOutput', false))
    ans =
    
    1 (2%)
    
    2 (4%)
    
    3 (6%)
    
    4 (8%)
    
    5 (10%)
    

    rowc = [2 4 6 8 10];.

    如果前导值应除以2,则使用单个输入函数的另一种更简单的方法

    >> cell2mat(arrayfun(@(x) sprintf('%d (%d%%)\n\n', x / 2, x), rowc, 'UniformOutput', false))
    ans =
    
    1 (2%)
    
    2 (4%)
    
    3 (6%)
    
    4 (8%)
    
    5 (10%)
    

    注意:当arrayfun'UniformOutput', false 一起使用时,输出是一个元胞数组,然后我们可以使用cell2mat 将其转换为字符串矩阵。

    【讨论】:

      【解决方案2】:
      rowc = [2 4 6 8 10];
      A = [1:numel(rowc);rowc];
      str = sprintf('%d (%d%%) \n',A);
      disp(str)
      1 (2%) 
      2 (4%) 
      3 (6%) 
      4 (8%) 
      5 (10%) 
      

      sprintf 让您以任何您想要的格式创建一个字符串,查看文档以获取有关数字标题和特殊字符的详细信息。

      显然sprintf 的行为是从 C 继承的,因此它将访问您插入其中的任何变量作为一个长的单列向量(即A(:),这称为linear indexing)。这意味着无论您输入两个行向量还是两个列向量,此代码都不起作用。因此,您应该将输入创建为考虑线性索引的正确矩阵,因此要声明A 的额外行。

      【讨论】:

      • sprintf 是正确的,但这不会为 OP 的问题产生正确的输出。
      • 你的输出不正确的前导整数。它们应该是 1、2、3、4、5,但你有 1、3、5、4、8。
      • @IKavanagh 我只花了 10 分钟调试那个东西。哪个白痴决定 sprintf 将变量作为线性索引,而不是像每个向量的第一个元素,然后是每个向量的第二个元素……
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-23
      • 1970-01-01
      • 2011-07-12
      • 2013-02-05
      • 2019-08-06
      • 1970-01-01
      • 2017-02-28
      相关资源
      最近更新 更多