分解字符串然后转换为向量?

时间:2013-03-13 18:52:54

标签: arrays string matlab

如果我有三个字符串,例如'Y20194''219Y42''12345',我如何将其分解为[Y 2 0 1 9 4][1 2 3 4 5]这样的向量和[2 1 9 Y 4 2]?我正在使用str2num,但我认为在转换为数值之前,我错过了一个步骤(首先将字符串中的各个数字分开)。此外,字符无法正确读取,使用str2num给我[]。

我有一个带有字符串行的文件,例如上面的字符串。我使用fgetl将我的文件的每一行读成字符串但是有点困难。

4 个答案:

答案 0 :(得分:2)

您不能在数字向量中同时包含字符和数字。

您可以执行以下操作:

s = 'Y20194';
c = cellstr(s')';
v = str2double(c);

单元格数组cs中的所有字符分隔为单个单元格。请注意,您必须首先转置字符串s

在向量v中,第一个值为NaN,因为它是一个字符。

答案 1 :(得分:1)

将保留char。并且数字将转换为双重类型。

如果输入不是来自读取文件,则代码如下。 result1是包含所需数组的单元格:

enter image description here

如果输入是一个文件,我们以此文件为例:demo1.txt,其内容如下: enter image description here

将每行转换为您想要的代码,如下所示。代码将每行转换为您想要的,然后显示它。

enter image description here

如果要将“Y”或其他字母替换为零,则代码如下:

enter image description here

答案 2 :(得分:0)

也许STRSPLIT会有所帮助。

ts = strsplit('Y20194');
%       ts <- {'Y', '2', '0', '1', '9', '4'}

现在你可以尝试使用str2num将向量中的每个元素单独转换为数字。

N = size(ts, 1);
str = cell(1, N);
for i=1:N;
    str{i} = str2num(ts{i, 1});
end

但是由于字符串中的某些字符不是数字(例如'Y'),我不希望这完全有效。

(已经有一段时间了,我的一些索引可能会被切换。)

答案 3 :(得分:0)

如果您想将Y更改为0,可以使用一个非常简单的解决方案:

str = 'Y20194';
str(str==Y)='0';
str - '0'