Usuwanie spacji
Ostatnio zmodyfikowano 2016-01-16 16:18
Garniturek Temat założony przez niniejszego użytkownika |
Usuwanie spacji » 2016-01-15 18:02:05 Witam mam plik tekstowy, w którym występują podwójne spacje, mam je poprawić. Proszę o jakieś wskazówki co do kodu, albo źle wczytuję, albo nie rozumiem dlaczego if nigdy się nie 'zdarza'. Pomocy! :) Plik: <code>malo nas do pieczenia chleba</code> Kod: #include <iostream> #include <cstdlib> #include <sstream> #include <fstream> #include <string> #include <vector> using namespace std; vector < string > wektor; void wczytaj( 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 ); } line_no++; } file.close(); } void zapisz( string filename, vector < string > wektor ) { fstream plik; plik.open( filename, ios::out ); for( auto v = wektor.begin(); v != wektor.end(); ++v ) plik <<* v; plik.close(); } int main() { wczytaj( "tekstowy.txt" ); auto v = wektor.begin() + 1; while( v != wektor.end() ) { if( * v == " " && *( v - 1 ) == " " ) { v = wektor.erase( v ); } else v++; } zapisz( "tekst.txt", wektor ); for( auto w = wektor.begin(); w != wektor.end(); ++w ) cout <<* w; system( "pause" ); return 0; }
|
|
DejaVu |
» 2016-01-15 19:02:47 Wczytuj całe wiersze, a nie napisy rozdzielane spacjami. |
|
Garniturek Temat założony przez niniejszego użytkownika |
» 2016-01-15 19:38:57 Okej. Moja pętla wyszukująca spacji po sobie nie działa, dlaczego? są jakieś gotowe funkcje wyszukujące danych znaków? Próbowałem z find(), ale nie miałem zupełnie pomysłu jak to zrobić |
|
mateczek |
» 2016-01-15 20:10:53 rozwiązań może być kilka !!! jedna z propozycji #include <iostream> #include <string> using namespace std;
int main() { string line1 = { "we kajak io pq q" }; string line2; char znakPoprzedni; for( char znak: line1 ) { if(( znak == ' ' ) &&( znakPoprzedni == ' ' ) ) continue; znakPoprzedni = znak; line2 += znak; } cout << line2 << endl; line2.clear(); }
|
|
carlosmay |
» 2016-01-15 20:53:22 Podobne zadanie było w kursie. Zrobiłem to wtedy tak: size_t pos = s.find( " " ); while( pos != string::npos ) { s.erase( pos, 1 ); pos = s.find( " ", pos ); }
|
|
michal11 |
» 2016-01-15 21:14:53 Nie możesz po prostu wczytywać pojedynczych wyrazów i doklejać spacji ? while( inFile >> word ) { outFile << word << " "; }
|
|
Garniturek Temat założony przez niniejszego użytkownika |
» 2016-01-15 23:13:25 Oh, dzięki za pomoc. Wszystkie rozwiązania są świetne. Mógłby mi ktoś jeszcze trochę przybliżyć to: string::npos ? :) |
|
carlosmay |
» 2016-01-16 00:41:39 std::basic_string::nposJeżeli w trakcie wykonywania przeszukania funkcja szukająca osiągnie std::string::npos , oznacza brak dopasowania. |
|
« 1 » 2 |