【问题标题】:Breaking up a string and then converting to a vector?分解字符串然后转换为向量?
【发布时间】:2013-03-28 00:54:54
【问题描述】:

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

我有一个文件,其中包含上面的字符串行。我使用fgetl 将文件的每一行读入字符串,但我有点卡住了。

【问题讨论】:

  • 将字符串转换为标量值数组(之前已回答过):stackoverflow.com/questions/12255056/… 你想如何处理非数字值,即上面的Y 将在结果数组?
  • 我有一个字符串文件,我想将它们读入矩阵并将 Ys 更改为 0。我正在使用fgetl 来读取我的文件,然后我被困在如何将这些字符串读入向量中,因为我想一旦我能够将这些字符串转换为向量,我就可以使用find 来改变像我想要的那样从 Ys 到 0s。

标签: arrays string matlab


【解决方案1】:

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

您可以执行以下操作:

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

单元格数组c 会将s 中的所有字符分隔到各个单元格中。请注意,您必须先转置字符串s

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

【讨论】:

  • +1 以获得好的答案,但我认为您可能希望将最后一段作为对另一个答案的评论。
  • 将最后一段移至评论。清理。
【解决方案2】:

字符将被保留。并且数字将被转换为双精度类型。

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

如果输入的是一个文件,我们以这个文件为例:demo1.txt,其内容如下:

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

如果你想用零替换'Y'或其他字母,那么代码如下

【讨论】:

  • 啊,是的,第二个就是我要找的。谢谢!如果在将其读入单元格数组后,我想将“Y”转换为数字怎么办。例如,在我读入字符串文件后,我想将所有 Y 都更改为 0?我可以使用find 命令将 Y 替换为 0 吗?我知道这适用于普通数值向量,但它也适用于元胞数组吗?
  • 嗨,我已经更新了答案。见最后一张图。如果你想'array'而不是'cell',你可以将第11行更改为'result1=[]'。要使用 'find' 定位单元格中的一个元素,您可以参考这篇文章:stackoverflow.com/questions/8061344/…
【解决方案3】:

也许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'),我不希望它完美地工作。

(好久不见,我的一些索引可能会切换。)

【讨论】:

  • 我相信STRSPLIT只出现在最新的2013a版本中。而且您需要额外的参数来将字符串拆分为单个字符。有关示例,请参见 documentation
【解决方案4】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-10
    • 1970-01-01
    • 2019-10-16
    • 2021-07-17
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多