Octave中是否有一个函数可以返回单元数组中字符串的第一次出现的位置?
我发现findstr
可以实现此功能,但它返回一个向量,而我不需要。我想要像index
那样的结果,但它只适用于字符串。
如果没有这样的函数,你有任何关于如何解决这个问题的建议吗?
Octave中是否有一个函数可以返回单元数组中字符串的第一次出现的位置?
我发现findstr
可以实现此功能,但它返回一个向量,而我不需要。我想要像index
那样的结果,但它只适用于字符串。
如果没有这样的函数,你有任何关于如何解决这个问题的建议吗?
findstr
的弃用,结合find
和strcmpi
可能会很有用。 strcmpi
通过忽略字母大小写来比较字符串,这对于您的目的可能很有用。 如果这不是您想要的,请使用没有尾随i
的函数,例如strcmp
。 输入到strcmpi
或strcmp
的是要搜索的字符串str
,对于您的情况,附加输入参数是一个字符串数组A
。 strcmpi
或strcmp
的输出将给出一个逻辑向量,其中每个位置k
告诉您单元格数组A
中的字符串k
是否与str
匹配。 然后,您将使用find
查找字符串匹配的所有位置,但是您可以通过指定最大位置数n
以及约束搜索的位置来进一步限制它 - 具体而言,如果您想查看第一个或最后一个匹配字符串的n
个位置。str
中,并且您的单元格数组存储在A
中,请执行以下操作:index = find(strcmpi(str, A)), 1, 'first');
需要重申的是,find
会找到所有字符串匹配的位置,而第二个和第三个参数告诉你只返回结果的第一个索引。具体来说,这将返回所搜寻的字符串的第一次出现,或者如果找不到,则返回空数组。
octave:8> A = {'hello', 'hello', 'how', 'how', 'are', 'you'};
octave:9> str = 'hello';
octave:10> index = find(strcmpi(str, A), 1, 'first')
index = 1
octave:11> str = 'goodbye';
octave:12> index = find(strcmpi(str, A), 1, 'first')
index = [](1x0)
strcmp
/strcmpi
只比较完整的字符串,因此如果你正在搜索子字符串的存在,你可能需要使用正则表达式。 - sco1