好的,所以我从文本文件中检索了这个字符串,我现在应该将它移动指定的数量。例如,如果我检索的字符串是
成为或不成为 这就是问题
,班次数为5,则输出应为
stionTo是或不是 这就是阙
我打算使用circshift但是给定的字符串不会匹配的尺寸。我将检索的字符串将来自.txt文件。
所以这是我使用的代码
S = sprintf('To be, or not to be\nThat is the question')
circshift(S,5,2)
但输出是
stionTo是或不是 这就是阙
但我需要
stionTo是或不是 这就是阙
答案 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);