在合并两个字符串时,警告控制字符'\ S'无效

时间:2016-02-23 16:33:32

标签: matlab

我有两个变量,例如:

path='data\voc11\SegmentationClassExt\%s.png'
name='123'

我想将两个字符串连接成一个字符串:

data\voc11\SegmentationClassExt\123.png

我使用了以下代码:

sprintf(path, name)

但是我收到以下错误:

  

警告:控制字符'\S'无效。有关格式字符串中有效的控制字符,请参阅“doc sprintf”。

ans =

dataoc11

我在Windows上使用MATLAB。你能给我任何解决方案吗?我试图更改path='data\\voc11\\SegmentationClassExt\\%s.png',当我这样做时,上面的代码将起作用。但是,当前数据是

path='data\voc11\SegmentationClassExt\%s.png';

2 个答案:

答案 0 :(得分:4)

使用matlab函数fullfile

filename = fullfile ( path, [name '.png'] );

or 

filename = fullfile ( path, sprintf ( '%s.png', name ) );

注意:您应该避免使用path作为变量,因为它已经是Matlab函数

答案 1 :(得分:3)

在开始之前,强烈建议您不要将path用作本地变量path是MATLAB用于解析函数范围的全局变量,尤其是当您要使用工具箱中的任何函数时。用你自己的字符串覆盖path实际上会使MATLAB无法正常运行。使用其他变量名称。

现在要解决您的问题,您可以使用fullfile作为@matlabgui建议的内容,或者如果您不关心操作系统兼容性并且仅在Windows中工作,则可以手动将路径更改为你已经放置了这样你可以引入两个反斜杠它确实可以在Windows操作系统上工作,或者你可以使用字符串替换功能,这样所有反斜杠都会附加一个反斜杠。

这两种方法中的任何一种都可以使用:

方法1 - 使用正则表达式

pat = 'data\voc11\SegmentationClassExt\%s.png';
pat_new = regexprep(pat, '\\', '\\\\');

函数regexprep通过正则表达式执行字符串替换。我们搜索所有单个反斜杠并用双反斜杠替换它们。请注意,单个反斜杠\是正则表达式中的特殊字符,因此如果您明确要查找反斜杠的内容,则必须在其旁边放置一个反斜杠。

方法2 - 使用strrep

pat = 'data\voc11\SegmentationClassExt\%s.png';
pat_new = strrep(pat, '\', '\\');

strrep代表 Str ing Rep 花边。它与我们上面讨论过的正则表达式非常相似。但是,最好的是在查找实际角色时不必附加额外的反斜杠。

执行此操作后,您可以正常使用sprintf

pat_new = sprintf(pat_new, name);