【问题标题】:Difference between string, cell array of strings, vector of strings, and matrix of strings in MatlabMatlab中字符串、字符串元胞数组、字符串向量和字符串矩阵之间的区别
【发布时间】:2017-06-29 15:23:32
【问题描述】:

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

如何区分单字符串、字符串元胞数组、字符串向量和字符串矩阵?

即我要区分,

  1. 'My name is X'
  2. {'My', 'name', 'is', 'X'}
  3. ['My', 'name', 'is', 'X']
  4. ['My', 'name' ; 'is', 'X']

我编写了以下例程。但是,它没有按预期工作。例如,

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

【问题讨论】:

  • not working 是什么意思?它是否出错,如果有,错误是什么?它是否没有给出预期的输出,是这样的,你期望什么,你得到什么?请注意,您的第三个示例与单个字符串“MynameisX”没有什么不同,而您的第四个示例是无效的 MATLAB 语法,因为矩阵中的所有行必须具有相同的列数。
  • 我不明白你在问什么。目标是尝试确定输入参数的类型,还是将一些字符串写入文件?您的示例中所需的输出是什么?您的代码在此实例中检测到的类型是什么?
  • @beaker,我正在尝试编写一个可以将任何类型的输入打印到文本文件的例程。
  • ... 其中哪一部分似乎无法正常工作?您是否单独尝试过每个 if/else 子句中的代码,看看它们是否给您想要的结果?您的条件是否适用于您的测试变量?

标签: string matlab


【解决方案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

【讨论】:

    猜你喜欢
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多