Advertisement
Guest User

Untitled

a guest
Dec 14th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.83 KB | None | 0 0
  1.  
  2. std::string SubDataMenu::AddToArrays() {
  3.     system("cls");
  4.     std::cout << "Введите добавляемую строку, вводя числа через пробел(\".\"разделитель в дробных числах, \";\" - конце ввода):" << std::endl;
  5.     char c;
  6.     std::string s = "";
  7.     double* vals = new double[0];
  8.     bool flag = false;
  9.     bool doub = false;
  10.     scanf_s("%c", &c);
  11.     size_t count = 0;
  12.     scanf_s("%c", &c);
  13.     while (c != ';') {
  14.         if (c == ' ' || c == '\n' || c == 13) {
  15.             if (s != "") {
  16.                 flag = false;
  17.                 vals = (double*)realloc(vals, (++count) * sizeof(double));
  18.                 vals[count - 1] = atof(s.c_str());
  19.             }
  20.             s = "";
  21.         }
  22.         else if (c == '.' || c == ',') {
  23.             c = ',';
  24.             doub = true;
  25.             s += c;
  26.             if (flag) {
  27.                 free(vals);
  28.                 while (c != ';')
  29.                     scanf_s("%c", &c);
  30.                 return "Неверное значение: две точки в числе\n";
  31.             }
  32.             flag = true;
  33.         }
  34.         else if (c <= '9' && c >= '0') {
  35.             s += c;
  36.  
  37.         }
  38.         else if (c == '-') {
  39.             if (s == "")
  40.                 s += c;
  41.             else {
  42.                 while (c != ';')
  43.                     scanf_s("%c", &c);
  44.                 return "Минус не в начале числа";
  45.             }
  46.         }
  47.         else {
  48.             free(vals);
  49.             while (c != ';')
  50.                 scanf_s("%c", &c);
  51.             return "Один из символов - ни пробел, ни точка, ни цифра\n";
  52.         }
  53.         scanf_s("%c", &c);
  54.     }
  55.     if (s != "") {
  56.         vals = (double*)realloc(vals, (++count) * sizeof(double));
  57.         vals[count - 1] = atof(s.c_str());
  58.     }
  59.     if (count == 0)
  60.         return "Вы не ввели строку";
  61.     Array tmp;
  62.     if (doub)
  63.         tmp.arrD = vals;
  64.     else {
  65.         int* tmpA = new int[count];
  66.         for (int i = 0; i < count; i++) {
  67.             tmpA[i] = (int)vals[i];
  68.         }
  69.         free(vals);
  70.         tmp.arrI = tmpA;
  71.     }
  72.     tmp.Size = count;
  73.     data.ArraysPB(tmp);
  74.     return "Строка успешно добавлена";
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement