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

Usuwanie powtórzonych liter z wyrazu C++

Ostatnio zmodyfikowano 2019-12-23 00:41
Autor Wiadomość
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.

C/C++
#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!
P-175854
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.
P-175856
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
P-175857
pekfos
» 2019-12-22 23:47:23
C/C++
x.erase( a, 1 );
Ta linia zmienia numerację znaków. Inkrementacja a w pętli po usunięciu znaku pomija znak bez sprawdzania.
P-175858
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.

C/C++
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;
        }
    }
}
P-175859
« 1 »
  Strona 1 z 1