![alt text](https://i.stack.imgur.com/a8L5M.png)
Изначально у меня есть пользовательские десятичные числа (0 - 15), и я превращу их в двоичные числа.
Скажем, эти цифры записаны в текстовый файл, как показано на рисунке. Эти числа расположены по номерам 1. Тире - используется для разделения разных групп по 1.
Мне нужно прочитать этот файл и сравнить строки одной группы со всеми строками в группе ниже, т.е. группу 1 со всеми строками в группе 2 и группу 2 - группу 3.
Дело в том, что допускается только один столбец с разницей 0/1, и этот столбец заменяется буквой t. Если обнаружено более одного столбца различий, не пишите.
Так, скажем, группа 2, 0001, с группой 3, 0011, отличается только второй столбец. однако 0010 и 0101 - это два столбца разницы.
Результат будет записан в другой файл .....
В данный момент, когда я читаю эти строки, я использую вектор string . Я сталкивался с битсетом. Важно то, что я должен получить доступ к символу по одному за раз, что означает, что я разбил вектор string на вектор char . Но кажется, что может быть более простой способ сделать это.
Я даже думал о хеш-таблице - связанный список. Имея группу 1, назначенную на H [0]. Каждое сравнение выполняется как H [current-group] с H [current_group + 1]. Но за пределами первого сравнения (сравнение 1 и 0) сравнение за пределами этого не будет работать при таком хеш-связанном способе. Поэтому я отказался от этого.
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
#include <iterator>
using namespace std;
int main() {
ifstream inFile("a.txt");
vector<string> svec;
copy(istream_iterator<string>(inFile), istream_iterator<string>(), back_inserter(svec));
copy(svec.begin(), svec.end(), ostream_iterator<string>(cout,"\n"));
for(int i = 0; i < svec.size(); i++)
{
cout << svec[i] << " ";
}
inFile.close();
return 0;
}
Это пример кода записи его в файл .... но, как я уже сказал, в моем случае все дело в векторе кажется непрактичным ....
Любая помощь приветствуется. спасибо