C++ 检查文本文件中的多注释并将其打印出来

C++ 检查文本文件中的多注释并将其打印出来,c++,c++11,c++14,c++17,C++,C++11,C++14,C++17,我试图循环浏览一个文本文件,扫描它,找到以#|开头、以|#结尾的多个注释,然后打印出来。我使用get函数循环遍历每个字符,使用peek函数检查下一个字符。目前,我的代码无法识别结束注释。请帮忙 我试着循环遍历每个字符,将其与多个注释进行比较,并将其存储在一个向量中 void Scanner::readingThroughTheFiles(ifstream& inFile) { lineNumber = 0; inFile.open(fileName); while

我试图循环浏览一个文本文件,扫描它,找到以#|开头、以|#结尾的多个注释,然后打印出来。我使用get函数循环遍历每个字符,使用peek函数检查下一个字符。目前,我的代码无法识别结束注释。请帮忙

我试着循环遍历每个字符,将其与多个注释进行比较,并将其存储在一个向量中

void Scanner::readingThroughTheFiles(ifstream& inFile)
{
    lineNumber = 0;
    inFile.open(fileName);
    while (!inFile.eof()) {
        char c = '\0';
        while (inFile.get(c)) { // loop getting single characters
            tokens = c;
            isAText(inFile);
            isAWord(inFile);
            // isAComment(inFile);
            if (c == '\n') {
                lineNumber++;
            }
            if (c == '#' && inFile.peek() == '|') {
                char next = inFile.peek();
                multipleComment += c;
                multipleComment += next;
                char c = tokens;
                while (inFile.get(c)) {
                    multipleComment += c;
                    if (tokens == '|' && next == '#') {
                        tokenTypes.push_back(multipleComment);
                        values.push_back("COMMENT");
                        // lineNumbers.push_back(lineNumber);
                        multipleComment.clear();
                    }
                }
            }

代码中的问题如下:

if (tokens == '|' && next == '#') {
这种情况永远不可能是真的,因为您只设置了一次
next
(上面几行),并且它的值始终是
|
。请看这一行:

char next = inFile.peek();
第二个问题是变量
tokens
的值总是
#
。也许你想做点什么

if (c == '|' && inFile.peek() == '#') {
    // rest of your code
}
编辑:如果要保存行号,还应在第二个while循环中检查
\n
。否则,如果注释跨越多行,行号将不会增加

但是,在输入第二个
while
循环之前,应该暂时存储行号。如果不这样做,存储在向量
lineNumbers
中的行号将始终是最后一个行号

int lineNumberSave = lineNumber;
while (inFile.get(c)) {
    multipleComment += c;
    if (c == '|' && inFile.peek() == '#') {
        // rest of your code
        lineNumbers.push_back(lineNumberSave);
    }
}

代码中的问题如下:

if (tokens == '|' && next == '#') {
这种情况永远不可能是真的,因为您只设置了一次
next
(上面几行),并且它的值始终是
|
。请看这一行:

char next = inFile.peek();
第二个问题是变量
tokens
的值总是
#
。也许你想做点什么

if (c == '|' && inFile.peek() == '#') {
    // rest of your code
}
编辑:如果要保存行号,还应在第二个while循环中检查
\n
。否则,如果注释跨越多行,行号将不会增加

但是,在输入第二个
while
循环之前,应该暂时存储行号。如果不这样做,存储在向量
lineNumbers
中的行号将始终是最后一个行号

int lineNumberSave = lineNumber;
while (inFile.get(c)) {
    multipleComment += c;
    if (c == '|' && inFile.peek() == '#') {
        // rest of your code
        lineNumbers.push_back(lineNumberSave);
    }
}

multipleComment
有什么类型?请发布一个,否则我们无法理解发生了什么,很可能无法帮助您。String,我将它推到String向量中
multipleComment
有什么类型?请发布一个,否则我们就无法理解发生了什么,也很可能无法帮助你。String,我把它推到一个strings向量中,hanks Benjamin,这很有帮助,没问题。如果你愿意的话,你可以接受这个答案,因为我可以在你的帮助下解决它。我唯一的问题是你从我的代码中看到的行号,非常感谢。当我们到达终点时,我还试图存储行号。我想当你检查字符是否是新行时,增加它。但它好像不是递增的,而且它对blank没有任何作用lines@user8628552:一般来说,这应该有效。如果你发布你的代码(编辑你的问题),帮助会更容易。谢谢Benjamin,这很有帮助没问题。如果你愿意的话,你可以接受这个答案,因为我可以在你的帮助下解决它。我唯一的问题是你从我的代码中看到的行号,非常感谢。当我们到达终点时,我还试图存储行号。我想当你检查字符是否是新行时,增加它。但它好像不是递增的,而且它对blank没有任何作用lines@user8628552:一般来说,这应该有效。如果你发布你的代码(编辑你的问题),这将更容易得到帮助。