function res = containsStr(str, sub)
res = 0;
strCharsCount = length(str);
subCharsCount = length(sub);
startCharSub = sub(1);
% loop over character of main straing
for ic = 1:strCharsCount
currentChar = str(ic);
% if a substring starts from current character
if (currentChar == startCharSub)
%fprintf('Match! %s = %s\n', currentChar, startCharSub);
matchedCharsCount = 1;
% loop over characters of substring
for ics = 2:subCharsCount
nextCharIndex = ic + (ics - 1);
% if there's enough chars in the main string
if (nextCharIndex <= strCharsCount)
nextChar = str(nextCharIndex);
nextCharSub = sub(ics);
if (nextChar == nextCharSub)
matchedCharsCount = matchedCharsCount + 1;
end
end
end
%fprintf('Matched chars = %d / %d\n', matchedCharsCount, subCharsCount);
% the substring is inside the main one
if (matchedCharsCount == subCharsCount)
res = 1;
end
end
end
3条答案
按热度按时间fcg9iug31#
让我们继续使用
contains
文档中的示例:在八度音程中,没有(双引号)字符串。因此,我们需要切换到普通的、旧的(单引号)字符数组。在另请参阅一节中,我们得到了一个指向strfind
的链接。我们将使用这个函数,它也是在Octave中实现的,来创建一个模拟contains
行为的匿名函数。此外,我们还需要cellfun
,这在Octave中也是可用的。请看下面的代码片段:输出如下:
这应该类似于MATLAB的
contains
的输出。所以,最后-是的,您需要自己复制功能,因为
strfind
不是确切的替代品。希望这对你有帮助!
**编辑:**在
cellfun
调用中使用'isempty'
而不是@isempty
,以获得更快的内置实现(请参阅下面carandraug的注解)。cgfeq70w2#
我不太熟悉MuPad函数,但看起来这是在重新发明
ismember
函数(Matlab和Octave中都有)。例如:
即
'jim'
是{'greta'
,'george'
,'jim'
,'jenny'
}的成员,而'stan'
不是。此外,
ismember
还支持查找匹配元素的索引:qgzx9mmu3#
就我个人而言,我使用自己的实现,如果字符串
str
包含整个子字符串sub
,则返回1:结束