初学者 c#根据字符提取单词的问题

名称名称 2017-03-23 01:13:28
提取字符串a中找字符串b的字母所包换的单词,然后保存到字符串c中。
string a="absorb absorb absorb absorb apple angel badly bad"
string b="a,b"

我把a按空格分开然后每个单词一个字母一个字母分开对比,如果单词多的话速度太慢了。
有没好方法。

上面例子 a中找到 字母a 和b 同时出现的单词取出来(badly)也在内,b,a都在单词里。
现在问题 a中的每个单词的长度不能确定,每个单词是空格分开的。
第二个问题,字符串b中的字母的长度也不能确定 有可能找单个字母,有可能三个 "a,b"和"b,a"的结果一样。
也有可能"a,b,e"
谢谢各位。菜鸟如果单词有几百个或几千个,用split,substring 一个一个拆开对比速度有点慢。

...全文
289 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
名称名称 2017-03-23
  • 打赏
  • 举报
回复
看错了版主不好意思,我不仔细。。。谢谢。
名称名称 2017-03-23
  • 打赏
  • 举报
回复
引用 4 楼 xuzuning 的回复:
            string a="absorb absorb absorb absorb apple angel badly bad";
            string b = "a,b";
            var p = "(?=.*" + string.Join(")(?=.*", b.Split(',')) + ").*";
            foreach(var x in a.Split(' '))
                if(Regex.IsMatch(x, p)) Console.WriteLine(x);
测试数据不要重复,应把各种情况都考虑到
版主 这个出现一个问题了 ,比如这个例子单词里面ab ba 这样出现才能找到单词,如果 axxxbxx ,这样的单词取不出来了?就是意思a和b令居的时候。
xuzuning 2017-03-23
  • 打赏
  • 举报
回复
            string a="absorb absorb absorb absorb apple angel badly bad";
string b = "a,b";
var p = "(?=.*" + string.Join(")(?=.*", b.Split(',')) + ").*";
foreach(var x in a.Split(' '))
if(Regex.IsMatch(x, p)) Console.WriteLine(x);

测试数据不要重复,应把各种情况都考虑到
xuggzu 2017-03-23
  • 打赏
  • 举报
回复
据我所知,万个以下楼主举例的那种单词串用split一次性劈开花不了多久。用substring更快。所以不明白楼主多久算快。
如果想更快,建议按二进制逐个判读空格符来取单个字符,再用stringbuilder拼接。如果还想更快,用c++写类似的函数来做。
Forty2 2017-03-23
  • 打赏
  • 举报
回复
你想要优化运行效率可以自己写一个状态机。 可以实现O(N*M)的效率,其中N是字符串a的长度,M是字符串b中的字符个数。 还很适合初学者练手:)
shoppo0505 2017-03-23
  • 打赏
  • 举报
回复
用ling做可能效率更高

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧