将数字向量转换为字符串,而不在开始和结束时删除零

时间:2016-09-19 05:20:00

标签: arrays matlab vector

我有一个整数向量,我想把它转换成一个数字。例如:

h = [1 2 4 3];  % after conversion res= 1243
k = [ 0 0 0 0]; % after conversion res=0000
l = [0 0 2 1];  % after conversion res=0021

我尝试使用此方法

 b = [1 2 4 3];
 res= str2num(strrep(num2str(b'), ' ', ''))

当向量的开头或结尾没有零时,此方法可以正常工作。但是当结尾或开始时有零时,str2num正在移除它们。例如,对于向量kres=0。对于向量lres=21

如何在开头和结尾保留零?

5 个答案:

答案 0 :(得分:4)

至少对于Octave,您可以使用矢量化sprintf将每个数组元素打印成字符串。

>> a = sprintf('%d', [0 0 1 2 3 4 0 0])
a = 00123400

很可能相同的代码也适用于MATLAB。不幸的是我现在无法测试它。

答案 1 :(得分:2)

最简单的方法是将数字直接转换为字符,方法是根据带有 48 的ASCII字符表进行偏移:

char(h + 48)
char(k + 48)
char(l + 48)

如果你的输入是一个矩阵(我建议你),你还需要cellstr将字符矩阵转换为字符串的单元格数组:

h(1,:) = [1 2 4 3];
h(2,:) = [0 0 0 0];
h(3,:) = [0 0 2 1];

out = cellstr( char(h + 48) )

答案 2 :(得分:1)

您可以使用num2str()和正则表达式regexprep()来获得结果。

s1 = num2str(h)
s2 = num2str(k)
s3 = num2str(l)

数组直接转换为字符串,并产生以下输出。

s1 = 1  2  4  3
s2 = 0  0  0  0
s3 = 0  0  2  1

现在,我们可以使用正则表达式查找空格并将其替换为''

s1 = regexprep(s1,'\s+', '')
s2 = regexprep(s2,'\s+', '')
s3 = regexprep(s3,'\s+', '')

这会产生以下结果。

s1 = 1243
s2 = 0000
s3 = 0021

答案 3 :(得分:1)

在16b中,您可以使用新的字符串类。字符串构造函数将数值数组转换为相同维度的字符串数组。 Join将这些元素连接在一起。

>> b = [1 2 4 3];
>> string(b).join('')
ans = 
  string
    "1243"

答案 4 :(得分:0)

h = [1 2 4 3];
k = [0 0 0 0];
l = [0 0 2 1];

strrep(num2str(h), ' ', ''); % this will return '1234'
strrep(num2str(k), ' ', ''); % this will return '0000'
strrep(num2str(l), ' ', ''); % this will return '0021'