Usuwanie danych z pliku

0

Witam, piszę program, który ma pobrać dane z pliku txt, usunąć z niego podwójne spacje i wczytać na nowo poprawionego
Mam Problem przy usuwaniu podwójnych spacji, którego do końca nie rozumiem, bo wydaje mi się, że dobrze to napisałem.
Treść pliku: malo nas do pieczenia chleba

Kod programu:

#include <iostream>
#include <cstdlib>
#include <sstream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
vector <string> wektor;
void zapisz(string filename)
{
	fstream file( filename, ios::in );
	string line;
	int line_no = 0;

	while( getline( file, line ) )
	{
		string cell;
		stringstream line_stream( line );
		int couter = 0;
		while( getline( line_stream, cell, ' ') )
		{
			wektor.push_back(cell);
			wektor.push_back(" ");
		}

		line_no++;
	}
	file.close();
}
int main()
{
	zapisz("tekstowy.txt");
	auto v=wektor.begin();
	while(v!=wektor.end())
	{
		if (*v==" " && *(v-1)==" ")
		{
			v=wektor.erase(v);
		}
		else 
			v++;

	}
	for (auto w=wektor.begin(); w!=wektor.end(); ++w)
		cout<<*w<<endl;;
	system ("pause");
	return 0;
} 
3
int main()
  {
   ifstream fin("tekstowy.txt");
   string content;
   getline(fin,content,0);
   fin.close();
   size_t size=0,i=0;
   for(int ch=0,prev=0;i<content.size();++i)
     {
      ch=content[i];
      if(prev!=' ') content[size++]=ch;
      prev=ch;
     }
   content.resize(size);
   ofstream fout("tekstowy.txt");
   fout<<content;
   fout.close();
   return 0;
  } 
0

Dzięki za pomoc, a mógłbyś wskazać jeszcze co w moim programie jest źle, że nie usuwa? :)

0

W twoim źle wszystko:

  1. Wsadzasz jakiś dziwny wiersz pomiędzy odczytane wierze: wektor.push_back(" ");
  2. Wyłazisz poza zakres: *(v-1)==" "
  3. Nigdzie nie analizujesz znaków wiersza
0

Wczytuję, każdy wyraz osobno, stąd

while( getline( line_stream, cell, ' ')) 

, no i następnie chcę po każdym wyrazie wrzucić " ", żeby je rozdzielić, stąd ten wiersz wektor.push_back(" ");

. Poprawiłem tę pętle, już nie wychodzi za zakres. Może mi ktoś wytłumaczyć dlaczego ten if, nigdy się nie spełnia, skoro zdarzają się spację koło siebie? :)

```cpp
	auto v=wektor.begin()+1;
	while(v!=wektor.end())
	{
		if (*v==" " && *(v-1)==" ")
		{
			v=wektor.erase(v);
		}
		else 
			v++;
	}
 
0

@Garniturek przeciez vector dziala jak tablica. Wiec jak robisz push_back to juz masz oddzielone (jest w innym indeksie) to nie jest string... i tym bardziej nie laczy tego jeden po drugim. dodawanie " " jest zbedne. i logika oparta na " " jest bezsensowna.

0

Ahh zmyliło mnie to, że przy wyświetlaniu wyświetla się jak ciąg znaków

1 użytkowników online, w tym zalogowanych: 0, gości: 1