比较文本文件的元素

Comparing elements of text file between each other

本文关键字:元素 文件 文本 比较      更新时间:2023-10-16

我正在尝试将三个数字的块相互比较,以创建一个新的输出文件,其中只有满足该数字的输出文件:块的第一个数字小于第二个数字并且小于第三个数字,块中的第二个数字必须大于第一个但小于第三个。

这是我输入文件的代码:

int main()
{
ofstream outfile ("test.txt");
outfile << "123 456 789 123 123 432 n 123 243 " << endl;

我想将其分成三个块,例如"123"、"456"等,以便只能在新的输出文件中写入满足要求的那些。我决定将整个文件转换为整数向量,以便能够比较它们。

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;
}
}
}

然而,这只是比较第一个块,你会以不同的方式做吗? 还是我应该继续做矢量的想法

你可以这样做。"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();
}

如果你的任务是:块的第一个数字小于第二个数字并且小于第三个数字,块中的第二个数字必须大于第一个但小于第三个数字 - 字符串类型 - 排序 - 使用它(( 如果数据是 3 位数字并且空格分隔

(std::stringstream ss{line}; - 例如像 fstream (((

#include <iostream> 
#include <vector> 
#include <iterator>
#include <string>
#include <sstream>
#include <algorithm>

int main() {
std::string line{"123 456 789 123 123 432 123 243 "};
std::cout << line << std::endl;
std::string out_line;
std::stringstream ss{line};
std::string tmp_str;
while(ss >> tmp_str) {
if (std::is_sorted(std::begin(tmp_str), std::end(tmp_str))) {
out_line += tmp_str + " ";
}
}
std::cout << out_line << std::endl;
return 0; 
}