讲解视频:可以在bilibili搜索“MATLAB教程新手入门篇——数学建模清风主讲”。
MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili
将十进制数1至100转换为二进制数,判断转换后的二进制数中有哪些是回文数?要求输出一个字符矩阵,矩阵每一行的字符向量的格式为:'十进制数:转换后的二进制数',可以在每一行字符向量的末尾加上空格保证长度相等。
(提示:转换后的二进制数为字符向量类型,将这个字符向量反转顺序,如果和原来的一样就是回文数。例如'101'、'1001'都是二进制回文数)。
上面两段代码都能实现题目的要求(代码的关键差异已使用高亮标出)。在每次循环中,如果找到回文数,我们会将构造好的字符向量 tmp 添加到 res 中,左侧代码使用的是已经过时的strvcat函数,右侧代码使用的是char函数。由于拼接过程中,char函数不会忽略空字符向量'',因此右侧的代码中我们额外加入了一行代码:res(1,:) = []; 这行代码能够删除字符矩阵res中的第一行,它的第一行实际上都是空格(由空字符向量''自动添加空格形成),因此删除后不影响最终的结果。尽管使用char函数需要多加一行,但仍然建议大家使用 char 函数,这样能避免将来的兼容性问题。
细心的同学应该发现了,使用disp函数输出res时,MATLAB也会输出每行末尾的空格,尽管我们肉眼看不到它们,但将结果复制到其他位置时可能会引起不必要的麻烦。
下面我们写一段程序,它能依次输出字符矩阵cc的各行,并在输出时会自动删除各行末尾的空格。
思路:首先使用size(cc,1)得到字符矩阵cc的行数,然后对cc的每一行进行循环。在循环体中:使用cc(ii,:)获取每一行表示的字符向量,将其保存到变量c_ii中,接下来我们使用了deblank函数,这个函数可以删除c_ii末尾的空白字符,最后我们使用disp函数输出处理后的字符向量,这样输出的每一行都不会有末尾的空格。