Usuwanie powtórzonych liter z wyrazu C++
Ostatnio zmodyfikowano 2019-12-23 00:41
TheFandorn Temat założony przez niniejszego użytkownika |
Usuwanie powtórzonych liter z wyrazu C++ » 2019-12-22 18:54:09 Do większego programu potrzebuję usunięcia powtórzeń liter, oraz spacji z wyrazów. Wszystko wcześniej przerzucam na wielkie litery, usuwam spacje - i to działa - ale mam problem z usunięciem powtórzonych liter. Mianowicie, gdy później w podanej linii tekstu litery powtarzają się więcej niż raz po sobie program ich nie usuwa (np słowo "ala" ""wypluwa"" poprawnie - jako "AL", ale już np. "alaala" - jako "ALA"). Ja wiem dlaczego tak się dzieję - rozumiem zasadę działania swojego własnego kodu, ale nie mam pomysłu jak to napisać, żeby wyeliminować ten błąd. #include <iostream>
using namespace std;
int main() { string x = ""; getline( cin, x ); for( int i = 0; i <= x.size() - 1; i++ ) { x[ i ] = toupper( x[ i ] ); } int k = 0; for( int i = 0; i <= x.size() - 1; i++ ) { k = x.find( ' ' ); if( k > 0 ) x.erase( k, 1 ); } int z = 0; for( int i = 0; i <= x.size() - 1; i++ ) { for( int a = i + 1; a <= x.size() - 1; a++ ) { if( x[ i ] == x[ a ] ) x.erase( a, 1 ); } } cout << x; cout << endl; }
Z góry dziękuję za pomoc! |
|
pekfos |
» 2019-12-22 19:27:30 Do usuwania sąsiednich identycznych znaków wystarczy jedna pętla, nie dwie. Ty sprawdzasz każdy znak z każdym. |
|
TheFandorn Temat założony przez niniejszego użytkownika |
» 2019-12-22 20:10:12 ale ja potrzebuje usunąć wszystkie powtórzone znaki. Nie tylko sąsiednie |
|
pekfos |
» 2019-12-22 23:47:23 Ta linia zmienia numerację znaków. Inkrementacja a w pętli po usunięciu znaku pomija znak bez sprawdzania. |
|
TheFandorn Temat założony przez niniejszego użytkownika |
» 2019-12-23 00:41:37 Dzięki, wymyśliłem rozwiązanie. Nie było to trudne. for( int i = 0; i <= x.size() - 1; i++ ) { for( int a = i + 1; a <= x.size() - 1; a++ ) { if( x[ i ] == x[ a ] ) { x.erase( a, 1 ); a = a - 1; } } }
|
|
« 1 » |