到目前为止我有以下代码
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(){
ofstream outfile;
ifstream infile;
string line;
infile.open ("input.DAT");
outfile.open ("output.txt");
while (infile.good()){
getline (infile, line);
outfile << line << endl;
}
outfile.close();
infile.close();
return 0;
}
所有这一切都是获取它的 input.DAT 并将其输出到 output.txt。但是,输入文件并不干净。它采用这种格式:
(ASCII 垃圾) 1:66 OS 波兰华沙(ASCII 垃圾)
示例图片:
另一个例子:
所以我想要做的是输出垃圾之间的东西,换行符分隔。但我不知道如何按字符迭代/输出,以及指示什么是有效输出的好方法(我的意思是我可以检查字符是否在我想的特定范围内,但我不知道这是怎么回事用 C++ 完成)。
我认为可能会有所帮助的是首先以 (Number)(Number)(Colon)(Number)(Space) 或 (Number)(Colon)(Number)(Space) 的形式搜索某些内容,然后将所有内容收集起来,直到不是字母/逗号/句号/等的东西,并添加换行符。这可以做到吗?
我希望这是有道理的!如果我需要澄清更多,请告诉我。
编辑:第一次尝试
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#include <cctype>
using namespace std;
int main(){
ofstream outfile;
ifstream infile;
string line, res;
infile.open ("input.DAT");
outfile.open ("output.txt");
while (infile.good()){
std::getline(infile, line);
res = "";
for(std::string::size_type i = 0; i < line.length()-4; i++){
if (isdigit(line[i+1]) && line[i+2]==":" && isdigit(line[i+3])){
res+=line[i];
i++;
while (isalnum(line[i]) || line[i] == "/" || line[i] == "\\" || line[i] == "=" || line[i] == "#" || line[i] == ":" || line[i] == " " || line[i] == "." || line[i] == "," || line[i] == "-" || line[i] == "'" || line[i] == '"'){
res+=line[i];
i++;
}
outfile << res << endl;
res = "";
}
}
}
outfile.close();
infile.close();
return 0;
}
但它无法编译,因为“ISO C++ 禁止指针和整数之间的比较”
编辑:我自己修复了这个,将引号更改为单引号。我想我在这里找到了自己的问题。它不会让我删除我的问题。