Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 正则表达式。搜索不重复数字的单词_C++_Regex_Visual C++_Char_Fstream - Fatal编程技术网

C++ 正则表达式。搜索不重复数字的单词

C++ 正则表达式。搜索不重复数字的单词,c++,regex,visual-c++,char,fstream,C++,Regex,Visual C++,Char,Fstream,我需要写的代码,将输出字没有重复的数字。通过赋值,我必须使用char数组。我决定用正则表达式来实现这一点。现在我有这样一个表达: regex rx ("^(?!.*(.).*\1)[0-9]+$"); 如果您单独获取字符串中的每个单词,则正则表达式可以工作,但如果您将字符串中的所有单词用空格分隔,则正则表达式无法工作。我怎样才能解决这个问题 输入文件:123456780 987 787 代码必须至少输出1234567890,因为这是第一个匹配项,并且它不输出任何内容 完整代

我需要写的代码,将输出字没有重复的数字。通过赋值,我必须使用char数组。我决定用正则表达式来实现这一点。现在我有这样一个表达:

regex rx ("^(?!.*(.).*\1)[0-9]+$");
如果您单独获取字符串中的每个单词,则正则表达式可以工作,但如果您将字符串中的所有单词用空格分隔,则正则表达式无法工作。我怎样才能解决这个问题

输入文件:123456780 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;
}    
intmain(){
正则表达式rx(“^(?。*().*\1)[0-9]+$”;
流鳍;
fin.open(“input.txt”);
int计数器=0;
char ch;
while(ch=fin.get()!=EOF)
{
计数器++;
}
你可以用

\b(?!\d*(\d)\d*\1)\d+\b
详情如下:

  • \b
    -单词边界
  • (?!\d*(\d)\d*\1)
    -数字中不允许重复数字
  • \d+
    -一个或多个数字
  • \b
    -单词边界
见:

#包括
#包括
#包括
使用名称空间std;
int main(){
标准::正则表达式r(r“(\b(?!\d*(\d)\d*\1)\d+\b)”;
char*str=“123456780 987 787”;
for(cregex_迭代器it(str,str+strlen(str),r);it!=cregex_迭代器{};it++)
{

您的正则表达式必须匹配字符串的开头和结尾,并且不能包含除数字以外的任何字符(因为是负向前看)。没有重复数字的单词是什么?您能举一些例子吗?
\
需要在字符串中转义,可以使用
\\1
或原始字符串
R”(\1)
。您可能需要
正则表达式rx(R“(^(?。*()..\1)\d(?:\s*\d)*$);
(如果每个数字之间可以有任意数量的空格,但不允许前导/尾随空格)。@WiktorStribiżew:.非常感谢!但是我如何将其用于字符数组?(sry用于愚蠢的问题)@Tamada看到更新的演示。非常感谢你!我在哪里可以阅读关于regex的详细信息,以免以后再问愚蠢的问题?@Tamada-See@Tamada很高兴它对你有用。如果我的回答对你有帮助,也请(参见)在达到15个代表点后,您有权获得向上投票的特权。请注意,您可以向上投票所有有帮助的答案。