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

Usuwanie znaków w tekscie do pewnego znaku

Ostatnio zmodyfikowano 2014-09-16 12:00
Autor Wiadomość
wojownik266
Temat założony przez niniejszego użytkownika
Usuwanie znaków w tekscie do pewnego znaku
» 2014-09-15 14:40:33
Mam taki tekst jak ten poniżej… Teraz chciałbym w każdym zdaniu tego tekstu usunąć lub zastąpić wszystkie znaki (cyfry, litery, itp.) aż do znaku ‘-‘, dowolnym znakiem... Jednym słowem chodzi mi o to aby został tylko taki tekst:”xxxxxx - przy,wy ,na,o”. Jak tego dokonać? Pomoże ktoś?

1. AT (et) – przy, w, na, o
2. BOY (boj) – chłopiec
3. BE (bi) – być
4. RIGHT (rajt) – prawy, dobry, poprawny
5. THEY (wej) – oni

Wyprodukowałem taki oto program:

C/C++
/* memset example */
#include <cstdio>
#include <cstring>
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    ifstream in( "slowka.txt" );
    ofstream out( "gotowe.txt" );
    char sl[ 100 ];
    while( in.getline( sl, 100 ) )
    {
        for( int i = 0; i < 100; ++i )
        {
            if( sl[ i ] == '-' )
                 memset( sl, '-', i );
           
        }
        cout << sl << endl;
    }
   
    in.close();
    out.close();
    cin.get();
    return 0;
}
P-117033
michal11
» 2014-09-15 14:46:00
http://www.cplusplus.com​/reference/string/string/find/
http://www.cplusplus.com​/reference/string/string​/replace/

1. wczytaj linię
2. znajdź tekst który cie interesuje
3. zamień go na to co chcesz
4. jeżeli nie wczytano wszystkiego to przejdź do pkt 1
P-117034
wojownik266
Temat założony przez niniejszego użytkownika
» 2014-09-15 18:23:17
Z tego wszystkiego wyszedł mi taki program taki ja poniżej. Program niby działa ale wczytuje jedno zdanie ale nie to które jest pierwsze w pliku tekstowym tylko jakieś przypadkowe. Co zrobić aby ten program wczytywał wszystkie zdania? Co zmienić co dodać?
C/C++
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
using namespace std;

int main()
{
    ifstream in( "slowka.txt" );
    ofstream out( "gotowe.txt" );
    string line, zn = "-";
    size_t found = 0;
   
    while( getline( in, line ) )
    {
       
       
        found = line.find( zn );
        if( found != string::npos ) {
            line.replace( line.begin(), line.begin() + found, " " );
            cout << line << endl;
        }
       
    }
    in.close();
    out.close();
    cin.get();
    return 0;
}
P-117045
michal11
» 2014-09-15 20:43:42
U mnie dział dobrze, wczytuje wszystkie linie po kolei.
Wklej tutaj fragment pliku slowka.txt i wydruk z konsoli.

Edit.
Możliwe też, że masz przestawiony wskaźnik w pliku, spróbuj go zrestartować/ustawić na początek.
P-117052
wojownik266
Temat założony przez niniejszego użytkownika
» 2014-09-16 09:36:27
Fragment pliku słówka ma się tak. Wszystkich słówek jest 1000.

1. AT (et) – przy, w, na, o
2. BOY (boj) – chłopiec
3. BE (bi) – być
4. RIGHT (rajt) – prawy, dobry, poprawny
5. THEY (wej) – oni
6. MOVE (muw) – ruch, ruszać
7. HIS (hys) – jego
8. BEFORE (bifor) – przed
9.I (aj) – ja
10.MEAN (min) – złośliwy, średni, znaczyć
11.MUCH (macz) – dużo
12.AS (ez) – gdy, kiedy, ponieważ, (tak) jak
13.CAUSE (koz) – powód, przyczyna, potocznie: ponieważ
14.TURN (tern) – zakręt, skręcić, obrót
15.WITH (łyf) – z
16.FOR (for) – do, dla, po
17.LOW (loł) – nisko, cicho, niski, cichy
18.JUST (dżast) – tylko, właśnie
19.TO (tu) – do, na, po, za, dla, przy, ku, aby, żeby
20.FORM (form) – forma, tworzyć
21.ARE (ar) – są, jesteś (ty)
22.OLD (old) – stary
23.SAME (sejm) – taki sam, ten sam
24.DOES (das) – robić
25.TOO (tu) – także, za (np. za duży)
26.SET (set) – komplet, grupa
27.HAVE (hew) – mieć
28.HE (hi) – on
29.ON (on) – na, przy
30.SAY (sej) – mówić, powiedzieć
31.DIFFER (dyfer) – różnica, być innego zdania
32.AND (end) – i
33.SENTENCE (sentens) – zdanie
34.FROM (from) – od, z
35.WANT (łont) – chcieć
36.WHAT (łot) – co
37.GREAT (grejt) – świetnie
38.THROUGH (fru) – przez
39.OF (of) – z, o ,od

A Tutaj wydruk z konsoli

C/C++
- liczba, numer, wiele
P-117064
michal11
» 2014-09-16 11:04:16
C/C++
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
using namespace std;

int main()
{
    ifstream in( "slowka.txt" );
    ofstream out( "gotowe.txt" );
    string line, zn = "-";
    size_t found = 0;
   
    while( getline( in, line ) )
    {
       
       
        found = line.find( zn );
        if( found != string::npos ) {
            line.replace( line.begin(), line.begin() + found, " " );
        }
        cout << line << endl;
       
    }
    in.close();
    out.close();
    cin.get();
    return 0;
}

Spróbuj tak, prawdopodobnie wypisze ci teraz wszystkie linie. zauważyłem, że masz jakieś dziwne myślniki, u mnie wyglądały podobnie do |
P-117065
wojownik266
Temat założony przez niniejszego użytkownika
» 2014-09-16 11:48:09
Przeniesienie instrukcji cout i out poza ciało instrukcji if rzeczywiście wyświetla wszystkie linie ale bez zamiany (replace). To nie jest to o co mi chodziło... Tak czy tak dzięki za poświecony mi czas. Miłego dnia!
P-117067
michal11
» 2014-09-16 12:00:47
Oczywiście, że nie o to ci chodziło, ale to pozwoliło zlokalizować problem. Tak jak pisałem, twoje myślniki są jakieś dziwne, szersze niż normalne, albo zmień je na normalne w pliku albo dodaj je do wyszukiwania, może ci się przydac funkcja http://www.cplusplus.com​/reference/string/string​/find_first_of/
P-117068
« 1 »
  Strona 1 z 1