字符串,字符串的单元格数组,字符串的向量和Matlab中的字符串矩阵之间的区别

时间:2017-06-29 15:23:33

标签: string matlab

我正在尝试编写一个可以将任何类型的输入打印到文本文件的例程。

如何区分单字符串,字符串的单元格数组,字符串向量和字符串矩阵?

即。我想区分,

  1. 'My name is X'
  2. {'My', 'name', 'is', 'X'}
  3. ['My', 'name', 'is', 'X']
  4. ['My', 'name' ; 'is', 'X']
  5. 我写了以下例程。但是,它没有按预期工作。例如,

    string_list = ['my', ' ', 'name', 'is', ' ', 'xyz!'];
    write_string('write_string.txt', string_list);
    

    ,或者

    string_list = 'my name is xyz!';
    write_string('write_string.txt', string_list);
    

    输出

    m   y       n   a   m   e   i   s       x   y   z   !   
    

    源代码

    function write_string(file_name, string_list)
        mode = 'a';
        fid = fopen(file_name, mode);    
    
        d = size(string_list);
        l = length(d);
    
        % vector or cell-array
        if(l==2)
            N = length(string_list);
    
            % a cell array of strings
            if(iscell(string_list))    
                display('Cell array');
                for k=1:N
                    fprintf(fid, '%s\t', string_list{k});
                end
                fprintf(fid, '\n');
            % a vector of strings
            elseif(isvector(string_list))
                display('Vector');
                for k=1:N
                    fprintf(fid, '%s\t', string_list(k));
                end
                fprintf(fid, '\n');
            % a single string    
            else
                display('single string');
                fprintf(fid, '%s\t', string_list);
                fprintf(fid, '\n');
            end
        % A matrix of strings
        elseif(l==3)
            % TODO
            fprintf(fid, '\n');
        end   
    
        fclose(fid);
    end
    

1 个答案:

答案 0 :(得分:1)

你可能会因为没有意识到你并没有真正创建一个字符串数组而感到困惑,而是在创建一个字符矩阵。

您的string_list是一个1x14的字符矩阵:my nameis xyz!(请注意,您在nameis之间缺少一个空格。然后在你的代码中fprintf(fid, '%s\t', string_list(k))获取该字符串的每个元素,并在元素之间使用制表符打印它,这就是你得到的。

您有两个选择:

使用字符串的单元格数组(这是您的示例2)。在您的代码中,您可以使用iscellstr检查是否有字符串(即字符)的单元格数组。另请注意,您无需循环打印出来

if iscellstr(string_list)
   fprintf('%s\t',string_list{:});
else
   % just a char matrix
   fprintf('%s\t',string_list);
end

或者,如果您使用的是更新版本的MATLAB(我认为是R2016b或更高版本),那么 是一种字符串数据类型,它是使用double创建的引号,而不是单引号

string_list = ["my", " ", "name", "is", " ", "xyz!"];
if isstring(string_list)
   fprintf('%s\t',string_list)
end