如何解决常用表达搜索不重复数字的单词
我需要编写输出单词而不重复数字的代码。通过赋值,我必须使用 char 数组。我决定用正则表达式来做到这一点。目前我有这个表情:
regex rx ("^(?!.*(.).*\1)[0-9]+$");
如果你分别取字符串的每个单词,那么 regex 就可以了,但是如果你把字符串中的所有单词都用空格隔开,那么 regex 就不起作用了。我该如何解决这个问题?
输入文件:1234567890 987 787
代码至少要输出1234567890,因为这是第一次匹配,什么都不输出
完整代码:
int main() {
regex rx ("^(?!.*(.).*\1)[0-9]+$");
ifstream fin;
fin.open("input.txt");
int counter = 0;
char ch;
while (ch = fin.get() != EOF)
{
counter++;
}
cout << counter << "\n";
fin.close();
fin.open("input.txt");
char *str = new char [counter];
fin.getline(str,counter,'\0');
fin.close();
cmatch res;
std::regex_search(str,res,rx);
std::cout << res[0] << std::endl;
return 0;
}
解决方法
你可以使用
\b(?!\d*(\d)\d*\1)\d+\b
参见regex demo。 详情:
-
\b
- 一个词边界 -
(?!\d*(\d)\d*\1)
- 号码中不允许重复数字 -
\d+
- 一位或多位数字 -
\b
- 一个词边界
#include <string>
#include <iostream>
#include <regex>
using namespace std;
int main() {
std::regex r(R"(\b(?!\d*(\d)\d*\1)\d+\b)");
char *str = "1234567890 987 787";
for (cregex_iterator it(str,str + strlen(str),r); it != cregex_iterator{}; it++)
{
cout << (*it).str() << endl;
}
return 0;
}
输出将为 1234567890
和 987
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。