我正在尝试将三个数字的块彼此进行比较,以仅使用满足以下条件的文件来创建新的输出文件:块的第一个数字小于第二个且小于第三个数字,该块中的第二个数字必须大于第一个,但小于第三个。
这是我的输入文件代码:
int main()
{
ofstream outfile ("test.txt");
outfile << "123 456 789 123 123 432 \n 123 243 " << endl;
我想将其分成三个块,例如“123”,“456”等,以便仅在新输出文件中仅写入满足要求的块。我决定将整个文件转换为整数 vector ,以便能够进行比较。
char digit;
ifstream file("test.txt");
vector<int> digits;
while(file >> digit) {
digits.push_back(digit - '0');
}
并且我认为将它们进行比较的方法如下所示:
bool IsValid(vector<int> digits){
for(int i=0; i<digits.size(); i++){
if(digits[0] < digits[1] & digits[0] < digits[2] & digits[1]<digits[2])
return true;
else{
return false;
}
}
}
但是,这只是比较第一个块,您会做不同的事情吗?还是我应该继续做 vector 的想法
最佳答案
您可以通过这种方式进行。 “get”读取一个字符,当有3位数字时,将调用IsValid函数。
#include <fstream>
#include <string>
#include <vector>
using namespace std;
bool IsValid(vector<int> digits)
{
if(digits[0] < digits[1] & digits[0] < digits[2] & digits[1]<digits[2])
return true;
else
return false;
}
int main()
{
ifstream in("test.txt");
ofstream out("output.txt");
char tmp;
vector<int> digits;
while(in.get(tmp))
{
if(tmp!=' ' and tmp!='\n')
{
digits.push_back(tmp-'0');
if(digits.size()==3)
{
if(IsValid(digits))
out<<digits[0]<<digits[1]<<digits[2]<<endl;
digits.clear();
}
}
}
out.close();
in.close();
}
关于c++ - 相互比较文本文件的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59740655/