在matlab中移动一个字符串

时间:2017-06-16 17:46:03

标签: matlab

好的,所以我从文本文件中检索了这个字符串,我现在应该将它移动指定的数量。例如,如果我检索的字符串是

  

成为或不成为   这就是问题

,班次数为5,则输出应为

  

stionTo是或不是   这就是阙

我打算使用circshift但是给定的字符串不会匹配的尺寸。我将检索的字符串将来自.txt文件。

所以这是我使用的代码

S = sprintf('To be, or not to be\nThat is the question')

circshift(S,5,2)

但输出是

  

stionTo是或不是   这就是阙

但我需要

  

stionTo是或不是   这就是阙

2 个答案:

答案 0 :(得分:1)

通过存储新行的位置,删除新行并在以后添加它们我们可以实现这一点。此代码依赖于insertAfter函数,该函数仅在MATLAB 2016b及更高版本中可用。

S = sprintf('To be, or not to be\nThat is the \n question');
newline = regexp(S,'\n');
S(newline) = '';
S = circshift(S,5,2);
for ii = 1:numel(newline)
    S = insertAfter(S,newline(ii)-numel(newline)+ii,'\n');
end
S = sprintf(S);

答案 1 :(得分:1)

您可以通过对非换行符的索引执行循环移位来执行此操作。 (下面的代码实际上跳过所有控制字符,ASCII代码<32。)

function T = strshift(S, k)
   T = S;
   c = find(S >= ' '); % shift only printable characters (ascii code >= 32)
   T(c) = T(circshift(c, k, 2));
end

示例运行:

>> S = sprintf('To be, or not to be\nThat is the question')

S = To be, or not to be
That is the question

>> r = strshift(S, 5)

r = stionTo be, or not
to beThat is the que

如果您想跳过换行符,只需更改为

即可
c = find(S != 10);