如何对字符串使用通配符(匹配和替换)?
我想搜索一些字母,包括 ?
,替换为 C++ 字符串中匹配的字母。
想像abcdefgh
这样的词。我想找到一种算法来搜索输入 ?c
中任何被 ?
替换的字母,并找到 bc
,但它也应该检查 ?e?
并找到 def
。
你有什么想法吗?
I want to search for a number of letters including ?
replaced by a letter matched in a string in C++.
Think of a word like abcdefgh
. I want to find an algorithm to search for an input ?c
for any letter replaced by ?
, and finds bc
, but also it should also check for ?e?
and find def
.
Do you have any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
使用 boost::regex 怎么样?或 std::regex 如果您使用的是启用 c++11 的编译器。
How about using boost::regex? or std::regex if you're using c++11 enabled compilers.
如果您只想支持
?
,那非常简单:当您在模式中遇到?
时,只需向前跳过一个输入字节(或检查isalpha
,如果你真的只想匹配字母)。编辑:假设更复杂的问题(从输入字符串中的任何位置开始查找匹配),您可以使用类似这样的代码:
如果您只想根据整个模式是否与整个输入匹配来表示是/否,您做了几乎相同的事情,但是使用
!=
而不是>
进行初始测试,然后基本上删除外循环。If you just want to support
?
, that's pretty easy: when you encounter a?
in the pattern, just skip ahead over one byte of input (or check forisalpha
, if you really meant you only want to match letters).Edit: Assuming the more complex problem (finding a match starting at any position in the input string), you could use code something like this:
If you only want to signal a yes/no based on whether the whole pattern matches the whole input, you do pretty much the same thing, but with the initial test for
!=
instead of>
, and then basically remove the outer loop.或者,如果您坚持使用“通配符”形式,则您要搜索的术语是“glob”(至少在类 UNIX 系统上)。
以 c 为中心的 API 可以在类 Unix 系统上的
glob.h
中找到,并且由两个调用glob
和globfree
组成。手册的3。切换到完整的正则表达式将允许您使用更多 C++ 方法,如其他答案所示。
Or if you insist on "wildcards" in the form you exhibit the term you want to search for is "glob"s (at least on unix-like systems).
The c-centric API is to be found in
glob.h
on unix-like systems, and consists of two callsglob
andglobfree
in section 3 of the manual.Switching to full regular expressions will allow you to use a more c++ approach as shown in the other answers.