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

[C++] Usunięcie wielokrotnych spacji w stringu

Ostatnio zmodyfikowano 2014-01-04 21:54
Autor Wiadomość
Kot
Temat założony przez niniejszego użytkownika
[C++] Usunięcie wielokrotnych spacji w stringu
» 2014-01-04 13:02:07
Witam. Muszę napisać funkcję do projektu, która usuwa nadmiarowe spacje ze stringu. Niestety, nie mogę używać gotowych funkcji klasy string.

Próbowałam coś takiego, jednak nie działa:

C/C++
void usun_spacje( string t )
{
   
    for( int i = 0; i < t.lenght() - 1; ++i )
    if( t[ i ] == ' ' && t[ i + 1 ] == ' ' )
         t[ i ] == 0; //podejrzewam, że tutaj jest błąd, jednak nie mam innego pomysłu, jak to rozwiązać
   
}
 
P-101097
pekfos
» 2014-01-04 13:46:17
C/C++
t[ i ] == 0;
Ta instrukcja niczego nie robi.

Niestety, nie mogę używać gotowych funkcji klasy string.
Utwórz pomocniczy string i wstawiaj do niego znaki, które mają być zachowane. Możesz też użyć std::remove_if(). Gotowa funkcja, ale nie z klasy std::string.
P-101099
00Andre
» 2014-01-04 13:48:45
Masz tutaj prostą funkcję.
C/C++
#include <iostream>
#include <string>

using namespace std;

// Usuwanie spacji z stringu
void UsuwanieSpacji( const string Tekst, string TekstPoUsuwaniu )
{
    // Ustawienie na pusty tekst
    TekstPoUsuwaniu = "";
   
    // Zmienna
    unsigned startpetla = 0;
   
    // Glowna petla
    while( startpetla == 0 )
    {
        // Petla ktora kazdy znak stringa sprawdza
        for( int a = 0; a < Tekst.length(); a++ )
        {
            // Sprawdzenie
            if( Tekst.at( a ) == ' ' ) startpetla = 1; // Jesli spacja to powtorzenie petli
            else TekstPoUsuwaniu += Tekst.at( a ); // Jesli nie to dodanie do drugiego stringu
           
        }
    }
   
    // Wypisanie
    cout << "Slowo :" << Tekst << endl;
    cout << "Slowo bez spacji :" << TekstPoUsuwaniu;
   
}

int main()
{
    /// By 00Andre
   
    // Nasz tekst
    string slowo = "    Tekst test";
   
    // Nasz tekst po usuniecu spacji
    string slowo_bez_spacji;
   
    // Wykonanie funkcji
    UsuwanieSpacji( slowo, slowo_bez_spacji );
   
    return 0;
}
P-101100
alixir
» 2014-01-04 14:05:29
Jeśli chcesz tylko wypisać tekst bez podwójnych spacji to możesz użyć funkcji zbliżonej do twojej

C/C++
void usun_spacje( string t )
{
    for( int i = 0; i < t.length() - 1; i++ )
    if( !( t[ i ] == ' ' && t[ i + 1 ] == ' ' ) )
         cout << t[ i ];
   
    cout << t[ t.length() - 1 ] << endl;
}
P-101101
pekfos
» 2014-01-04 14:26:27
Jeśli chcesz tylko wypisać tekst
Zamiast std::cout można użyć obiektu std::ostringstream i potem pobrać z niego wynik w postaci stringa.
P-101103
Kot
Temat założony przez niniejszego użytkownika
» 2014-01-04 17:42:49
Dziękuję za wszelką pomoc, mam tylko jedno pytanie do kodu, który podał 00Andre.

Dlaczego jeśli wpiszę

C/C++
cout << slowo_bez_spacji;

w funkcji main, nic się nie wypisuje? Jeśli jest tak jak zrobił 00Andre (wypisanie jest w funkcji UsuwanieSpacji) wszystko jest w porządku.
P-101129
pekfos
» 2014-01-04 17:44:52
Bo nie przekazał tego przez referencję.
P-101131
Kot
Temat założony przez niniejszego użytkownika
» 2014-01-04 21:54:27
No tak, oczywiście.

Powinnam już sobie poradzić. Bardzo dziękuję za pomoc.
P-101182
« 1 »
  Strona 1 z 1