Ваши переменные не инициализированы.В начале каждая переменная может содержать каждое возможное значение.В строке
in >> ch >> er >> ch;
вы снова читаете один символ, одну строку и один символ.
Первая строка вашего файла:
[Wed Oct 11 2017] [error] [127.0.0.1] -client denied.
Итак, сначала вы читаетепервый символ ch = '[
и установите курсор на следующую позицию.Далее вы читаете строку до пробела: er = "Wed"
.Затем вы снова читаете символ ch = 'O'
Курсор теперь указывает на
[Wed Oct 11 2017] [error] [127.0.0.1] -client denied.
^
Затем вы печатаете свои данные.Поскольку вы не читали переменные, вы получаете случайные числа.
Вывод
cout << ch << er << ch << ch << a << x << b << x << b << c << ch;
должен быть
OWedOOXCYCYZO
, где XY и Z - случайные целые числаи C - случайный символ.
Вместо этого вы должны прочитать всю строку и проанализировать ее (например, разбить на ']').Вы должны инициализировать и / или прочитать все ваши переменные.x, a, b, c
не установлены.Невозможно сказать, какие значения они содержат.
Это возможное решение для чтения записи журнала.
#include<iostream>
#include<sstream>
using namespace std;
int main (){
stringstream in("[Wed Oct 11 2017] [error] [127.0.0.1] -client denied.\n[Thu Oct 12 2017] [alert] [127.0.0.2] -user name not found.");
string line;
getline(in, line);
int startpos = line.find('[') + 1;
int endpos = line.find(']');
string date(line.substr(startpos, endpos-startpos));
cout << "Date:\t\t" << date << endl;
startpos = line.find('[', endpos) + 1;
endpos = line.find(']', startpos);
string type(line.substr(startpos, endpos-startpos));
cout << "Type:\t\t" << type << endl;
startpos = line.find('[', endpos) + 1;
endpos = line.find(']', startpos);
string ip(line.substr(startpos, endpos-startpos));
cout << "IP:\t\t" << ip << endl;
string message(line.substr(endpos + 2));
cout << "Message:\t" << message << endl;
return 0;
}
Вывод
Date: Wed Oct 11 2017
Type: error
IP: 127.0.0.1
Message: -client denied.