我注意到一个非常酷的方法来转换字符串,比方说
str = '1234'
Run Code Online (Sandbox Code Playgroud)
向量就是使用这个技巧.
vec = str - '0'
= [1 2 3 4]
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么这种方法有效?
此外,类似于:
vec1 = str -'1'
= [0 1 2 3]
Run Code Online (Sandbox Code Playgroud)
但
vec2 = str - '10'
Error using -
Matrix dimensions must agree.
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
当您使用带有字符串的算术运算符时,Matlab会将字符串转换为双精度数,将字符串转换为ascii值:
>> double('1')
ans =
49
Run Code Online (Sandbox Code Playgroud)
因此,减法可以正常工作,但添加会产生奇怪的结果
>> '1'+'1'
ans =
98
Run Code Online (Sandbox Code Playgroud)
将字符串数组转换为double会产生双精度数组,因此"矩阵尺寸必须一致":
>> double('10')
ans =
49 48
Run Code Online (Sandbox Code Playgroud)
因此,虽然减法'0'因此是一个很酷的捷径,但我建议您使用STR2DOUBLE来避免混淆.