首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较不同维度的字符串

比较不同维度的字符串
EN

Stack Overflow用户
提问于 2016-04-05 10:41:54
回答 1查看 75关注 0票数 0

我有字符串s1和s2

代码语言:javascript
复制
s1={'1' '631' '618' '574' '678'} 
s2={'1' '596' '674' '' '';'674' '631' '1' '631' '1';'641' '617' '674' '631' '654';'674' '673' '674' '673' '674';'674' '618' '1' '618' '631';'631' '1' '631' '674' '740';'739' '740' '733' '674' '631';'674' '673' '674' '1' '641';'618' '1' '631' '618' '631';'674' '631' '618' '631' '618';'674' '631' '1' '631' '625';'641' '642' '618' '631' '618';'618' '631' '1' '631' '1'}

我想比较一下s1和它的子字符串

代码语言:javascript
复制
{'1'}
{'1' '631'}
{'1' '631' '618'}
{'1' '631' '618' '574'}
{'1' '631' '618' '574' '678'}
{'631'}
{'631' '618'}
{'631' '618' '574'}
{'631' '618' '574' '678'}
{'618'}
{'618' '574'}
{'618' '574' '678'}
{'574'}
{'574' '678'}
{'678'} 

使用s2:我使用了strcmp(s1,s2),但没有得到预期的结果。你能帮帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-05 11:14:43

我强烈建议将所有字符串转换为数字,并使用矩阵操作而不是字符串操作:

代码语言:javascript
复制
S1 = cellfun(@str2num, s1)
S2 = cell2mat(str2double (s2)) %// NOTE its str2double here which converts any empty string or char into a NaN

现在做比较,如果你想要相交(我认为你是)

代码语言:javascript
复制
[intersect ind] =  ismember(S2,S1);

如果您想坚持使用String,您可以这样做,这样做效率要高得多:

代码语言:javascript
复制
ind=find(ismember(s2,s1{1}))
>> ind =

 1
19
22
28
31
37
39
47
54
65

strcmp的问题是,它比较两个字符串并返回一个逻辑,在您的示例中,您将面临5*65操作,这在一般情况下是耗时和糟糕的。因此,ismember函数是您的最佳选择。

要生成"s1及其子字符串“,可以使用combnk,如:

代码语言:javascript
复制
V = combnk(S1,1)
V = combnk(S1,2) %//change 1 to 5 based on the combinations.
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36424108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档