3.28 Usuwanie spacji
Ostatnio zmodyfikowano 2019-01-01 23:00
pekfos |
» 2018-12-12 08:14:03 Posłuchałem Twojej rady i zrobiłem kod wyszukujący dwie spacje: |
Jeśli masz więcej niż jedną pętlę, robisz zadanie źle. |
Podstawowe rozwiązanie ma mieć jedną pętlę. |
|
rottingham Temat założony przez niniejszego użytkownika |
» 2018-12-12 23:42:23 @jankowalski25 - dzięki za schemat. Zrozumiałem sposób działania, czas to przełożyć na kod. Mam mały problem. Napisałem sobie taki kod (kod może się wydawać durny, wiem, ale w ten sposób poznaję działanie języka). Nie rozumiem jednak kompletnie danych wyjściowych, czy możecie powiedzieć dlaczego otrzymuję takie dane? void modyfikujemy( string & tekst ) { string tablica; int i = 0; do { tablica[ i ] = tekst[ i ]; i++; cout << i << endl; } while( i < 21 ); for( int i = 0; i < 21; i++ ) cout << tablica[ i ]; }
int main() { string tekst = "To jest przykladowy tekst."; cout << tekst << endl; modyfikujemy( tekst ); return 0; }
Dane jakie otrzymuję: To jest przykladowy tekst. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 117 To jest przyklad u |
|
pekfos |
» 2018-12-13 00:02:57 tablica ma zerową długość. Używaj push_back(). |
|
rottingham Temat założony przez niniejszego użytkownika |
» 2018-12-13 18:02:06 Jeżeli chodzi o ten sposób bez użycia metody erase. Czy o to chodziło? { string szukanyZnak = " "; int i = 0; int ileZnakow = tekst.size(); string tablica[ ileZnakow ]; do { if(( tekst[ i + 1 ] != szukanyZnak[ 0 ] ) ||( tekst[ i ] != szukanyZnak[ 0 ] ) ) tablica[ i ] = tekst[ i ]; i++; } while( i < ileZnakow ); for( int i = 0; i < ileZnakow; i++ ) cout << tablica[ i ]; }
|
|
pekfos |
» 2018-12-13 19:15:42 Poczytaj, co to jest std::string, bo używasz go na najbardziej bezsensowne sposoby jakie można tu wcisnąć. string szukanyZnak = " "; string tablica[ ileZnakow ]; Bzdury. Masz dane wejściowe w argumencie tekst i tam masz zapisać tekst po przetworzeniu. Jeśli będzie ci łatwiej, możesz sobie utworzyć dodatkowy napis wynik. I tyle. Ani jednego stringa więcej. |
|
rottingham Temat założony przez niniejszego użytkownika |
» 2018-12-13 21:00:52 O ile dobrze zrozumiałem Twoje uwagi... To chyba popełniłem dobry kod... Czy to rozwiązanie jest dobre? I czy to jest najbardziej efektywna metoda usuwania podwójnych spacji, o której wspominałeś? void modyfikujemy( string & tekst ) { char szukanyZnak = ' '; int ileZnakow = tekst.size(); int i = 0; int j = 0; do { if(( tekst[ i ] != szukanyZnak ) ||( tekst[ i + 1 ] != szukanyZnak ) ) { tekst[ j ] = tekst[ i ]; j++; } i++; } while( i < ileZnakow ); }
|
|
pekfos |
» 2018-12-13 21:07:58 Pierwsze pytanie zawsze brzmi: czy kod działa poprawnie. W obecnej formie - nie. Ale nie jesteś daleko. |
|
rottingham Temat założony przez niniejszego użytkownika |
» 2018-12-14 18:27:19 W ogniu niekończących się prób udało mi się stworzyć poniższy kod. Kod działa. Czy poprawnie wykonałem ten kod? :D I czy to jest ten najefektywniejszy sposób, o którym wspominałeś? void konwertuj( string & sTekst ) { int ileZnakow = sTekst.size(); int i = 0; int j = 0; char szukanyZnak = ' '; do { if(( sTekst[ i ] != szukanyZnak ) ||( sTekst[ i + 1 ] != szukanyZnak ) ) { sTekst[ j ] = sTekst[ i ]; j++; } i++; } while( i < ileZnakow ); sTekst.assign( sTekst, 0, j ); }
|
|
1 2 « 3 » 4 |