Advertisement
JewishCat

25v.odn.mas

May 24th, 2016
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.37 KB | None | 0 0
  1. #include <vector>
  2. #include <cstring>
  3. #include <fstream>
  4. #include <iostream>
  5. #include <math.h>
  6. #include <stdlib.h>
  7. using namespace std;
  8.  
  9. void GettingArrayOfNumbersInString(string str, vector<int>* arr)//функция, разделяющая строку на числа и добавляющая их в список прочитанных чисел
  10. {
  11.     //пока не конец строки
  12.     int pos = 0, x = 0;// эти переменные нужны будут, чтобы извлекать из массива символов число
  13.     while (str[pos] != '\n' && str[pos] != '\0' && pos < str.length() ){ // верно обрабатывается в том случае, если верно файл введен, исключения разлчные не обработаны если что, то есть четко по задаче
  14.         if (str[pos] == ' ' || str[pos] == '\n' || pos+1 == str.length())//разделяем на числа
  15.         {
  16.             if (pos+1 == str.length())//для последнего числа в строке
  17.             {
  18.                 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);
  19.                 arr->push_back(x);
  20.             }
  21.             else{
  22.                 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);//формируем наше четырехзначное число
  23.                 arr->push_back(x);
  24.             }
  25.         }
  26.         pos++;
  27.     }
  28.  
  29. }
  30.  
  31.  
  32. vector<int> ReadingFile(string file)
  33. {
  34.  
  35.     string str;
  36.     vector<int> arr;
  37.     /* инициируем файловый поток */
  38.     ifstream ifs(file);
  39.  
  40.     /* обработка исключения*/
  41.     if(!ifs.is_open()){
  42.         cerr << "Error: file " << file << " is not open\n";
  43.     }
  44.         /* считываем файл, конвертируем*/
  45.     else
  46.         while(getline(ifs, str)){
  47.             /* обрабатываем число строку первую*/
  48.             GettingArrayOfNumbersInString(str, &arr);//передаем по ссылке наш arr, чтобы в функции не создалась новая копия, а использовался именно этот список и в него добавлялись числа
  49.             }
  50.  
  51.     /* закрываем поток */
  52.     ifs.close();
  53.     return arr;
  54. }
  55.  
  56. void RemoveBadNumbers (vector<int>* arr)
  57. {
  58. //    for(int i = 0; i < arr->size(); i++)
  59. //    {
  60. //        if (( arr[i] / 1000) + (arr[i] / 10) + (arr[i] % 100) == 6)
  61. //        {
  62. //
  63. //        }
  64. //    }
  65.     vector<int>::iterator it;
  66.     for(it=arr->begin(); it!=arr->end(); it++)
  67.     {
  68.         //abcd
  69.         //если a+c не делится на 3 и b+d не делится на 7
  70.         if (!( ((*it / 1000) + (*it / 10 % 100 % 10)) % 3 == 0 )  || !( ((*it/100%10) + (*it % 10)) % 7 == 0) )
  71.         {
  72.             arr->erase(it);
  73.             it--;
  74.         }
  75.     }
  76.     //1757
  77. }
  78.  
  79. void WrittingFile( string fileNameOut,vector<int>* arr)
  80. {
  81.  
  82.     ofstream f;
  83.     vector<int>::iterator it; // итератор для списка(вектора)
  84.     f.open(fileNameOut);
  85.     //Проверка успешности открытия файла
  86.     if (f.fail())
  87.     {
  88.         cout<<"\n Ошибка открытия файла";
  89.         exit(1);
  90.     }
  91.     for(it=arr->begin(); it!=arr->end(); it++){
  92.         f << *it;
  93.     }
  94.     f.close();
  95. }
  96.  
  97. void PrintVector( vector<int>&a)
  98. {
  99.     for (vector<int>::iterator it = a.begin() ; it!=a.end() ; ++it)
  100.         cout<<*it << " ";
  101. }
  102.  
  103. int main(int argc, const char * argv[]) {
  104.     setlocale(LC_ALL, "rus"); // корректное отображение Кириллицы
  105.     cout << "Enter name of input file\n";
  106.     vector<int> arr;
  107.     string fileNameIn = "input.txt";
  108.     cin >> fileNameIn;
  109.  
  110.     cout << "Enter name of output file\n";
  111.     string fileNameOut = "output.txt";
  112.     cin >> fileNameOut;
  113.  
  114.     arr = ReadingFile(fileNameIn);
  115.     cout << "Содержимое вектора : " ;
  116.     RemoveBadNumbers(&arr); // удаляем числа, которые нам не нужны из списка чисел
  117.     WrittingFile(fileNameOut , &arr);
  118.  
  119.     PrintVector(arr);
  120.     return 0;
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement