После выполнения программа выводит лишнее
Мне нужно написать программу, которая выведет на экран и в файл последовательности цифр, в которых не повторяются цифры. В файле последовательности отделены одним и более пробелов, переводом строки, каретки. В выходном файле все последовательности должны быть записаны через одиночный пробел. Проблема такова. что после выполнения программы, кроме нужной мне последовательности, в конце может выводится какое-либо число, которое не должно было выводиться вовсе. Например, в файле содержится следующее: 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;
}