Modyfikowanie tekstu (2 problemy)
Ostatnio zmodyfikowano 2015-05-14 17:05
Huxyf Temat założony przez niniejszego użytkownika |
Modyfikowanie tekstu (2 problemy) » 2015-05-12 22:34:10 Witam, Mam 2 problemy z poniższym kodem. 1. Nie wiem z jakiego powodu ale getline'y w funkcjach nie działają 2. Pierwsza funkcja nie chce działać, prawdopodobnie w tym if'ie z komentarzem coś nie gra. Proszę o pilną pomoc. #include <iostream> #include <string>
using namespace std;
void Wyswieltekst( string tekst, int dlugosc ) { int wiersz = 15; bool number = false; cout << endl << "INDEKSY ZNAKOW: " << endl << endl; for( int x = 1; x <= dlugosc; ) { cout << "x wynosi: " << x << endl; cout << "dlugosc - x: " << dlugosc - x << endl; cout << "dlugosc: " << dlugosc << endl; if(( dlugosc - x ) < wiersz ) { wiersz =( dlugosc - x ); } for( int y = 0; y < wiersz; y++ ) { if( number == false ) { cout << "[" << tekst[ y + x ] << "]"; if(( y + x ) > 99 ) { cout << " "; } else if(( y + x ) > 9 ) { cout << " "; } } if(( y ==( wiersz - 1 ) ) &&( number == false ) ) { number = true; cout << endl; y = 0; } if( number == true ) { cout << "[" << y + x << "]"; } } cout << endl << endl; number = false; x += wiersz; } }
int Wybierz_opcje() { int znak; bool blad; cout << endl << "Modyfikacje tekstu" << endl; cout << "[1] Dopisz do konca" << endl; cout << "[2] Dopisz w dowolnym miejscu" << endl; cout << "[3] Usun fragment" << endl << endl; cout << "Wybierz modyfikacje: "; for(;; ) { cin.clear(); cin.sync(); cin >> znak; blad = cin.fail(); if(( blad == false ) &&( znak > 0 ) &&( znak < 4 ) ) { return znak; } cout << endl << "Nieprawidlowa modyfikacja! "; cout << "Wybierz ponownie modyfikacje: "; } }
int Podaj_indeks( int dlugosc ) { int id; bool blad = false; do { cin.clear(); cin.sync(); cin >> id; blad = cin.fail(); if(( blad == true ) ||( id < 1 ) ||( id > dlugosc ) ) { cout << endl << "Nieprawidlowy indeks! "; cout << "Podaj ponownie numer indeksu: "; } } while(( blad == true ) ||( id < 1 ) ||( id > dlugosc ) ); return id; }
void Dopisz( string & tekst ) { string napis = ""; cout << "Wpisz tekst, ktory chcesz dopisac: "; getline( cin, napis ); tekst += napis; }
void Dopisz_w( string & tekst, int dlugosc ) { int id; string napis = ""; cout << "Wpisz tekst: "; getline( cin, napis ); cout << "Podaj numer indeksu przed, ktorym chcesz dopisac \"" << napis << "\": "; id = Podaj_indeks( dlugosc ); tekst.insert(( id - 1 ), napis ); }
void Usun( string & tekst, int dlugosc ) { int id_pocz, id_konc, pomocniczy; cout << "Podaj numer indeksu od, ktorego chcesz rozpoczac usuwanie: "; id_pocz = Podaj_indeks( dlugosc ) - 1; cout << "Podaj numer indeksu na, ktorym chcesz poprzestac usuwanie: "; pomocniczy = Podaj_indeks( dlugosc ) - 1; id_konc = pomocniczy - id_pocz; tekst.erase( id_pocz,( id_konc + 1 ) ); }
int main() { string ciag = ""; int dlugosc, opcja; cout << "Wprowdz tekst: "; getline( cin, ciag ); dlugosc = ciag.size(); opcja = Wybierz_opcje(); switch( opcja ) { case 1: { Dopisz( ciag ); break; } case 2: { Wyswieltekst( ciag, dlugosc ); Dopisz_w( ciag, dlugosc ); break; } case 3: { Wyswieltekst( ciag, dlugosc ); Usun( ciag, dlugosc ); break; } } cout << ciag; return 0; }
|
|
pekfos |
» 2015-05-12 22:48:18 Pewnie przez mieszanie >> z getline(), te dwie metody mają trochę odmienne polityki wobec znaków kończących wczytywanie. Próbuj dopisać cin.sync() przed wywołania getline(). |
|
Monika90 |
» 2015-05-12 22:49:11 po każdym cin >> zmienna; daj cin.ignore(); albo lepiej cin.ignore( numeric_limits < streamsize >::max(), '\n' ); |
|
Huxyf Temat założony przez niniejszego użytkownika |
» 2015-05-12 23:13:37 pekfos - Wielkie dzięki! cin.sync() przed getline'ami naprawił problem (1).
Proszę o pomoc przy if'ie. |
|
pekfos |
» 2015-05-12 23:20:01 2. Pierwsza funkcja nie chce działać |
A jak ma działać? |
|
Huxyf Temat założony przez niniejszego użytkownika |
» 2015-05-13 09:04:30 Funkcja ma wyświetlać listę znaków, które wprowadził użytkownik oraz nr. indeksu pod każdym znakiem. Ten if miał za zadanie sprawdzić czy długość ciągu - x to co się wyświetliło (czyli ilość pozostałych znaków) jest mniejsza od ilości znaków w wierszu, które są domyślnie ustawione na 15. Jeżeli tak ilości znaków w wierszu przypisz ilość pozostałych znaków. |
|
Huxyf Temat założony przez niniejszego użytkownika |
» 2015-05-14 17:05:24 Błąd zlokalizowany. Funkcja nie działała poprawnie z powodu x = 1 . Temat uważam za rozwiązany w związku z tym zamykam wątek. |
|
« 1 » |