Как проверить существование строки в файле
Пишу программу для генерации паролей. Все работает кроме одного цикла, который проверяет сгенерированную строку на существование такой же строки в фале(чтобы не было повторений). Все никак не могу додуматься как сделать эту проверку.
#include <Windows.h>
#include <fstream>
#include <iostream>
#include <string>
char buff[52] = {'A','a','B','b','C','c','D','d','E','e','F','f','G','g','H','h','I','i','J','j','K','k','L','l','M','m','N','n','O','o','P','p','Q','q','R','r','S','s','T','t','U','u','V','v','W','w','X','x','Y','y','Z','z' };
void BruteForce(int count) {
int count_line = 0;
bool prof = true;
int povtor = 0;
std::string str;
std::string strInput;
std::ifstream inf("pass.txt");
std::ofstream fout("pass.txt");
for (;;) {
for (int i = 0; i < count; i++) {
str += buff[rand() % 52 + 0];
}
getline(inf, strInput);
for (int i = 0; i < count_line; i++) { // проверка на существование уже такой записи
if (str == strInput) {
prof = false;
povtor++;
break;
}
}
if (prof == true) {
fout << str << std::endl;
count_line++;
}
else{
continue;
}
prof = true;
std::cout << "Слово записано: " << str << "\nКол-во слов: " << count_line << "\nКол-во повторившихся: " << povtor << "\n";
str.clear();
system("cls");
if (GetAsyncKeyState(VK_F1)) {
fout.close();
inf.close();
break;
}
}
}
int main()
{
srand(time(0));
setlocale(LC_ALL, "RUS");
BruteForce(10);
}
Ответы (1 шт):
Автор решения: a_nR1085__i
→ Ссылка
Попробуйте так:
while(getline(inf, strInput)) { //читать строки в файле пока они не закончатся
if (strInput == str) {
//строка совпала
prof = false;
povtor++;
break;
}
}
Также есть пару вопросов к коду:
- Почему вы пишите, что слово записано
std::cout << "Слово записано: " << str << "\nКол-во слов: " << count_line << "\nКол-во повторившихся: " << povtor << "\n";
если оно может оказаться повтором и не записаться?
- Вы 2 раза увеличиваете переменную
povtorна одном повторе. - В начале
count_line = 0, хотя в файле могут быть строки до записи.