Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB创建一个转换器函数(输入:整数)(输出:字符串)_Matlab_Function_Converter - Fatal编程技术网

MATLAB创建一个转换器函数(输入:整数)(输出:字符串)

MATLAB创建一个转换器函数(输入:整数)(输出:字符串),matlab,function,converter,Matlab,Function,Converter,在MATLAB中,我想创建一个函数,该函数输入一个整数并输出一个字符串,而不使用内置函数,如num2str、int2str或mat2str。 整数可能带有前导减号。 请帮忙 我要做的是将您的数字拆分为各个数字,并将它们放入一个数组中。然后,使用将此数字数组转换为字符。但是,您需要做的是获取每个数字并用48进行偏移。原因是char将存储在数组中的数字,找到映射到这些数字的ASCII等效字符,并将所有这些字符连接到单个字符串中。如果您查阅任何内容,您将看到0-9中的字符映射到48-57 第一个问题是

在MATLAB中,我想创建一个函数,该函数输入一个整数并输出一个字符串,而不使用内置函数,如num2str、int2str或mat2str。 整数可能带有前导减号。
请帮忙

我要做的是将您的数字拆分为各个数字,并将它们放入一个数组中。然后,使用将此数字数组转换为字符。但是,您需要做的是获取每个数字并用48进行偏移。原因是
char
将存储在数组中的数字,找到映射到这些数字的ASCII等效字符,并将所有这些字符连接到单个字符串中。如果您查阅任何内容,您将看到0-9中的字符映射到48-57

第一个问题是找出如何将数字分割成数字。查看我上一篇关于如何在MATLAB中使用的帖子。此函数仅适用于提取一个数字。此外,这假设该数字为正。我们想要得到所有的数字,所以您只需要将其使用矢量化。因此,我们现在要做的是正常地将数字提取出来,而不考虑数字的符号。我们通过对这个数字应用绝对值函数来实现这一点,然后正常地应用算法。如果数字为负数,我们可以在算法末尾附加负号

使用我在上一篇文章中编写的算法,通过对其使用进行矢量化,其结果是每个数字将存储到数组中的一个元素中。假设您的号码存储在
A
中,我们可以提取如下数字数组:

numDigits = floor(log10(abs(A))) + 1; %// Calculate total number of digits seen in the number
n = 1 : numDigits; %// Place digits into individual elements in the array
d = numDigits - (n - 1);
out_seq = floor(mod(abs(A), 10.^d) ./ 10.^(d-1)); %// Note: Absolute value
现在,最后一步是确定数字是否为负数。如果是,我们会在字符串中附加一个
-
符号。如果没有,只需手动转换号码:

if A < 0
   out = ['-' char(out_seq + 48)];
else
   out = char(out_seq + 48);
end


还要注意,我在运行函数时检查了每个输出的类。经验证,它们都是
char
,这是一个字符串。

听起来像是一个有趣的家庭作业。提示,检查
char(65:67)
的输出,然后检查
char(49:57)
。总是有
sprintf('%d',x)
,但我认为这也是禁止的。很好的解释+我想是伟大的人物吧@Kamtal-没问题!我只是不想让你被否决@chappjc-哇!我写了那个答案,却不知道你写了一个类似的。。。酷!
function [out] = num_converter(A)

numDigits = floor(log10(abs(A))) + 1; %// Calculate total number of digits seen in the number
n = 1 : numDigits; %// Place digits into individual elements in the array
d = numDigits - (n - 1);
out_seq = floor(mod(abs(A), 10.^d) ./ 10.^(d-1)); %// Note: Absolute value

if A < 0
   out = ['-' char(out_seq + 48)];
else
   out = char(out_seq + 48);
end
>> out = num_converter(669965)

out =

669965

>> class(out)

ans =

char

>> out = num_converter(-669965)

out =

-669965

>> class(out)

ans =

char

>> out = num_converter(-633)

out =

-633

>> class(out)

ans =

char

>> out = num_converter(63323)

out =

63323

>> class(out)

ans =

char