c++ - 相互比较文本文件的元素

标签 c++ file c++11 text

我正在尝试将三个数字的块彼此进行比较,以仅使用满足以下条件的文件来创建新的输出文件:块的第一个数字小于第二个且小于第三个数字,该块中的第二个数字必须大于第一个,但小于第三个。

这是我的输入文件代码:

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/

相关文章:

c++ - 使用 Visual C++ Express 10 链接到 boost::python

c++ - 连接/合并/加入两个 AVL 树

c - 获取文件详细信息时出现错误结果 C

php - 检测文件是否是PHP中没有mime类型的音频文件

c++ - 字符串文字的模板参数推导

c++ - 从 std::function 的返回类型推导出模板参数

c++ - 如果我在锁定互斥锁之前解锁它可以吗?

c++ - 直接显示捕获过滤器 "wrapper"

php - file_put_contents 上的互斥标志?

c++ - LLVM IR 中 bool 的数据类型