Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <cstring>
- #include <fstream>
- #include <iostream>
- #include <math.h>
- #include <stdlib.h>
- using namespace std;
- void GettingArrayOfNumbersInString(string str, vector<int>* arr)//функция, разделяющая строку на числа и добавляющая их в список прочитанных чисел
- {
- //пока не конец строки
- int pos = 0, x = 0;// эти переменные нужны будут, чтобы извлекать из массива символов число
- while (str[pos] != '\n' && str[pos] != '\0' && pos < str.length() ){ // верно обрабатывается в том случае, если верно файл введен, исключения разлчные не обработаны если что, то есть четко по задаче
- if (str[pos] == ' ' || str[pos] == '\n' || pos+1 == str.length())//разделяем на числа
- {
- if (pos+1 == str.length())//для последнего числа в строке
- {
- x = (static_cast<int>(str[pos-3])-48)*1000 + (static_cast<int>(str[pos-2])-48)*100 + (static_cast<int>(str[pos-1])-48)*10 + (static_cast<int>(str[pos])-48);
- arr->push_back(x);
- }
- else{
- x = (static_cast<int>(str[pos-4])-48)*1000 + (static_cast<int>(str[pos-3])-48)*100 + (static_cast<int>(str[pos-2])-48)*10 + (static_cast<int>(str[pos-1])-48);//формируем наше четырехзначное число
- arr->push_back(x);
- }
- }
- pos++;
- }
- }
- vector<int> ReadingFile(string file)
- {
- string str;
- vector<int> arr;
- /* инициируем файловый поток */
- ifstream ifs(file);
- /* обработка исключения*/
- if(!ifs.is_open()){
- cerr << "Error: file " << file << " is not open\n";
- }
- /* считываем файл, конвертируем*/
- else
- while(getline(ifs, str)){
- /* обрабатываем число строку первую*/
- GettingArrayOfNumbersInString(str, &arr);//передаем по ссылке наш arr, чтобы в функции не создалась новая копия, а использовался именно этот список и в него добавлялись числа
- }
- /* закрываем поток */
- ifs.close();
- return arr;
- }
- void RemoveBadNumbers (vector<int>* arr)
- {
- // for(int i = 0; i < arr->size(); i++)
- // {
- // if (( arr[i] / 1000) + (arr[i] / 10) + (arr[i] % 100) == 6)
- // {
- //
- // }
- // }
- vector<int>::iterator it;
- for(it=arr->begin(); it!=arr->end(); it++)
- {
- //abcd
- //если a+c не делится на 3 и b+d не делится на 7
- if (!( ((*it / 1000) + (*it / 10 % 100 % 10)) % 3 == 0 ) || !( ((*it/100%10) + (*it % 10)) % 7 == 0) )
- {
- arr->erase(it);
- it--;
- }
- }
- //1757
- }
- void WrittingFile( string fileNameOut,vector<int>* arr)
- {
- ofstream f;
- vector<int>::iterator it; // итератор для списка(вектора)
- f.open(fileNameOut);
- //Проверка успешности открытия файла
- if (f.fail())
- {
- cout<<"\n Ошибка открытия файла";
- exit(1);
- }
- for(it=arr->begin(); it!=arr->end(); it++){
- f << *it;
- }
- f.close();
- }
- void PrintVector( vector<int>&a)
- {
- for (vector<int>::iterator it = a.begin() ; it!=a.end() ; ++it)
- cout<<*it << " ";
- }
- int main(int argc, const char * argv[]) {
- setlocale(LC_ALL, "rus"); // корректное отображение Кириллицы
- cout << "Enter name of input file\n";
- vector<int> arr;
- string fileNameIn = "input.txt";
- cin >> fileNameIn;
- cout << "Enter name of output file\n";
- string fileNameOut = "output.txt";
- cin >> fileNameOut;
- arr = ReadingFile(fileNameIn);
- cout << "Содержимое вектора : " ;
- RemoveBadNumbers(&arr); // удаляем числа, которые нам не нужны из списка чисел
- WrittingFile(fileNameOut , &arr);
- PrintVector(arr);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement