После выполнения программа выводит лишнее

Мне нужно написать программу, которая выведет на экран и в файл последовательности цифр, в которых не повторяются цифры. В файле последовательности отделены одним и более пробелов, переводом строки, каретки. В выходном файле все последовательности должны быть записаны через одиночный пробел. Проблема такова. что после выполнения программы, кроме нужной мне последовательности, в конце может выводится какое-либо число, которое не должно было выводиться вовсе. Например, в файле содержится следующее: 5 \n76

\t77 78 9 89

00 78 12

13

1

Вывести должно: 5 76 78 9 89 78 12 13 1, а выводит: 5 76 78 9 89 78 12 13 1 3

#include <iostream>
#include <vector>
#include <fstream>
using namespace std;

//добавляем в вектор все последовательности, удовлетворяющие заданию
vector<char> processText(const char* const text,int counter) {
  vector<char> vec;
  int a = 0;
  for (int i = 0; i < counter - 1; ++i) {
      if (text[i] == ' ' || text[i] == '\0' || text[i] == '\n' || text[i] == '\t') {
          bool x = 1;
          for (int j = a; j < i; ++j) {
              for (int h = j + 1; h < i; ++h) {
                  if (text[j] == text[h]) {
                      x = 0;
                      break;
                  }
              }

          }
          if (x) {
              bool x2 = 0;
              for (int k = a; k < i; ++k) {
                  vec.push_back(text[k]);
                  x2 = 1;
              }
              if (x2)
                  vec.push_back(' ');
          }
          a = i + 1;
      }
  }
  return vec;
}

//удаляем лишние пробелы
char* ch_duplicate(char* s, char c) {
    char* t = s, * p = s;
    while (*p) {
        if (*p != c || *(p + 1) != c)
        ++s;
        *s = *(++p);
    }
    return t;
}

//удаляем символы перевода строки и каретки(если смотреть по примеру, то они в исходном файле
//присутствуют в виде символов)
char* ch_deleter(char* text,int counter) {
    char* t = text;
    for (int i = 0; i < counter; ++i) {
        if (text[i] == '\\' || text[i] == 'n' || text[i] == 't') {
            text[i] = ' ';
        }
    }
    return text;
}


int main() {
    ifstream ifs; //объект класса ifstream для открытия файла для чтения
    ifs.open("input.txt");//открываем файл
    int counter = 0;//счетчик символов в файле
    //считаем символы
    while (!ifs.eof())
    {
        char ch;
        ch = ifs.get();
        counter++;
    }
    ifs.close();//закрыли файл
    //открыли снова, чтобы заполнить массив 
    ifs.open("input.txt");
    char* text = new char[counter];//объявляем массив размера counter

    ifs.getline(text, counter, '\0'); //считываем все символы из файла
    ch_deleter(text,counter); //удаляем символы перевода строки и каретки, которые представлены в         виде символов
    ch_duplicate(text, ' '); //удаляем лишние проеблы

    vector<char> vec = processText(text,counter);//заполняем вектор последовательностями, подходящими     по условию

    //поскольку практика показывает, что в конце вектора могут оставаться пробелы, то находим последнюю цифру
    int i2;
    for (int i = vec.size()-1; i != 0; --i) {
        if (!isdigit(vec[i]))
        {
            i2 = i;
            break;
        }
    }

    ofstream ofs; //заводим объект класса ofstream для вывода в файл
    //открываем файл для вывода
    ofs.open("output.txt");
    //выводим на экран и в файл наш ответ
    for (int i = 0; i < i2; ++i) {
        cout << vec[i];
        ofs << vec[i];
    }
    ofs.close();
    ifs.close();
    delete[]text;//освобождаем память, выделенную под массив
    return 0;
}

Ответы (0 шт):