Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Usuwanie spacji

Ostatnio zmodyfikowano 2016-01-16 16:18
Autor Wiadomość
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:
C/C++
#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 );
            //wektor.push_back(" ");
        }
       
        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;
}
P-143546
DejaVu
» 2016-01-15 19:02:47
Wczytuj całe wiersze, a nie napisy rozdzielane spacjami.
P-143550
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ć
P-143551
mateczek
» 2016-01-15 20:10:53
rozwiązań może być kilka !!! jedna z propozycji
C/C++
#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();
}
P-143552
carlosmay
» 2016-01-15 20:53:22
Podobne zadanie było w kursie. Zrobiłem to wtedy tak:
C/C++
size_t pos = s.find( "  " ); // s to wczytany string, wyszukuje frazy (podwojna spacja)
while( pos != string::npos ) {
    s.erase( pos, 1 ); // usuwa pierwsza
    pos = s.find( "  ", pos ); // ponownie szuka podwojnej
}
P-143556
michal11
» 2016-01-15 21:14:53
Nie możesz po prostu wczytywać pojedynczych wyrazów i doklejać spacji ?

C/C++
while( inFile >> word )
{
    outFile << word << " ";
}
P-143563
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
 ? :)
P-143568
carlosmay
» 2016-01-16 00:41:39
std::basic_string::npos
Jeżeli w trakcie wykonywania przeszukania funkcja szukająca osiągnie
std::string::npos
, oznacza brak dopasowania.
P-143571
« 1 » 2
  Strona 1 z 2 Następna strona