gpt4 book ai didi

c++ - 调试断言失败文件、tokenScanner 和文本文件

转载 作者:行者123 更新时间:2023-11-28 07:25:09 25 4
gpt4 key购买 nike

我编写了一个程序,一次处理一个文本文件并提取相关信息。我的程序适用于某些文本文件,但不适用于其他文本文件。通过我的程序无缝运行的文件与不无缝运行的文件之间没有明显区别。

就有问题的文件而言:

  1. 程序打开文件
  2. 它一次读入并处理大量的行
  3. 但随后它到达问题行并给出错误消息:

    “调试断言失败文件:f:/dd/vctools/crt_bld/self_x86/src/isctype.c线路:56表达式:(无符号)(c+1) <= 256"

当我进入调试器模式时,问题似乎是由我下面代码中的“while(tokenScanner)”循环引起的。我提取了正在处理的问题行的内容,并将其与几个问题文件进行了比较,我发现断言失败消息在 </li> 处弹出。最后一个被处理的标记是“>”。我不清楚为什么这是个问题。原始文本文件中的这个特定标记与 <li 相邻。形式为 </li><li .因此,扫描器在通过该字符串的中途遇到了问题。关于为什么会这样以及如何解决这个问题的任何想法?任何建议将不胜感激!

这是我的代码的相关部分:

#include <string>
#include <iostream>
#include <fstream> //to get data from files
#include "filelib.h"
#include "console.h"
#include "tokenScanner.h"
#include "vector.h"
#include "ctype.h"
#include "math.h"

using namespace std;


/*Prototype Function*/
void evaluate(string expression);
Vector<string> myVectorOfTokens; //will store the tokens
Vector<string> myFileNames;

/*Main Program*/
int main() {

/*STEP1 : Creating a vector of the list of file names
to iterate over for processing*/
ifstream infile; //declaring variable to refer to file list
string catchFile = promptUserForFile(infile, "Input file:");
string line; //corresponds to the lines in the master file containing the list files
while(getline(infile, line)){
myFileNames.add(line);
}

/* STEP 2: Iterating over the file names contained in the vector*/
int countFileOpened=0; //keeps track of number of opened files

for (int i=1; i< myFileNames.size(); i++){
myVectorOfTokens.clear(); //resetting the vector of tokens for each new file

string fileName;
string line2;
ifstream inFile;
fileName= myFileNames[i];

inFile.open(fileName.c_str()); //open file convert c_str

if (inFile){
while(getline(inFile, line2)){
evaluate(line2);
}
}

inFile.close();
countFileOpened++;
}
return 0;
}

/*Function for Extracting the Biographer Name*/
void evaluate(string line){
/*Creating a Vector of Tokens From the Text*/
TokenScanner scanner(line); //the constructor
while (scanner.hasMoreTokens()){
string token=scanner.nextToken();
myVectorOfTokens.add(token);
}
}

最佳答案

while(!inFile.eof()

只是错误的(几乎在任何情况下)

while(getline(inFile, line2))
evaluate(line2);

更好

关于c++ - 调试断言失败文件、tokenScanner 和文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18879681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com