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

konwersja intów na string

Ostatnio zmodyfikowano 2018-06-16 22:27
Autor Wiadomość
konishyapl
Temat założony przez niniejszego użytkownika
konwersja intów na string
» 2018-06-13 11:44:43
Witam, piszę program na jedno z zadań spoja, i mam problem przy tej linijce
slowo2[ k ] = licznik;
, w programie tym mam wypisać skróconą wersje wyrazu, jeśli np wyraz to "AAAAABBCCCCC" to wyraz końcowy ma wyglądać "A5BBC5", i ww linia przypisuje ilość tych samych liter do
slowo2[ k ]
, tylko przy kompilacji zamiast cyfry pokazuje mi się jakiś symbol, próbowałem paru rozwiązań i albo nie działały, albo wyglądały dość słabo, może ktoś podpowie mi jak zrobić to w najbardziej przejrzysty, i najłatwiejszy sposób

a oto cały kod (na czas testów slowo2 ustawiłem na ciąg spacji)
C/C++
#include <iostream>
#include <string>
#include <cstdlib>

using namespace std;

/*void cos(string &napis)
{
    for(int i=0; i<napis.length(); i++)
    {
        napis[i] = toupper(napis[i]);
    }

    cout<<napis<<endl;
}
*/

int main()
{
    string slowo = "aaaalibbbbbbbabaaa", slowo2 = "                                      ";
    //cin>>slowo;
    int j = 0, k = 0, licznik = 0;
   
    while( j < slowo.length() )
    {
        if( slowo[ j ] != slowo[ j + 1 ] )
        {
            slowo2[ k ] = slowo[ j ];
            k++;
            j++;
        }
        else if( slowo[ j ] == slowo[ j + 1 ] )
        {
            slowo2[ k ] = slowo[ j ];
            k++;
            licznik++;
            do
            {
                licznik++;
                j++;
            }
            while( slowo[ j ] == slowo[ j + 1 ] );
           
            if( licznik > 2 )
            { cout << licznik << endl;
                slowo2[ k ] = licznik;
                k++;
                j++;
                licznik = 0;
            }
        }
    }
    cout << slowo2 << endl;
   
   
   
   
   
    return 0;
}
P-171538
pekfos
» 2018-06-13 15:16:08
P-171539
mateczek
» 2018-06-13 20:22:17
C/C++
slowo2[ k ] = licznik; // to jest błędne wstawienie cyfry do stringa
 
C/C++
slowo2[ k ] = licznik + '0' // do inta powiedzmy 9 możesz dodać kod znaku '0' i tym samym otrzymać kod znaku '9'=#39.  Dopiero znak o kodzie #39 wstawić do stringa

Ale licznik może być 234 czyli np liczbą trzy cyfrową. Więc wszelka próba wstawienia cyfry do stringa to już złe podejście.
P-171549
konishyapl
Temat założony przez niniejszego użytkownika
» 2018-06-14 12:50:33
@mateczek ten sposób byłby idealny gdyby nie licznik dwu lub więcej cyfrowy, chociaż i to można obejść, przy poomocy paru linijek, tak czy siak, wielkie dzięki

@pekfos to_string u mnie w codeBlocks nie działa(not declared in this scope), pomimo że mam zaznaczone żeby korzystał ze standardu C++11
masz może wskazówki jak to naprawić? aa printf() i ostringstream nie umiem zaimplementować w moim codzie tak żeby pomogło, tutaj też będę wdzięczny za wskazówki ;D

póki co rozwiązałem problem przy pomocy funkcji, ale i tak chętnie dowiem się jakie są inne rozwiązania.

Pozdrawiaaam
P-171554
pekfos
» 2018-06-14 15:25:05
to_string u mnie w codeBlocks nie działa(not declared in this scope), pomimo że mam zaznaczone żeby korzystał ze standardu C++11
Zainstaluj nowszy kompilator.

aa printf() i ostringstream nie umiem zaimplementować w moim codzie tak żeby pomogło
Niby jak nie umiesz? Cały potrzebny kod już jest podany w przykładach w tym artykule.
P-171556
mateczek
» 2018-06-15 09:13:13
to_string u mnie w codeBlocks nie działa(not declared in this scope), pomimo że mam zaznaczone żeby korzystał ze standardu C++11
podaj wersję code-Blocks i kompilatora. Może masz źle zaznaczone. Bo prawdę mówiąc to chyba ciężko by obecnie było o kompilator, który tego nie wspiera.

I jeśli robisz zadanie na spoja to może taki szablon
C/C++
#include <iostream>
#include<string>
using namespace std;
string spakuj( string & oryginalString ) {
    string wynikowy;
    //funkcja kompresjii do napisania
    return wynikowy;
};
int main() {
    string tekst_oryginal;
    int LiczbaTestow; // ile testów przewiduje sprawdzarka spoj
    cin >> LiczbaTestow; // wczytanie liczby testów
   
    while( LiczbaTestow-- ) { // pętla wykona się tyle razy i przewiduje zadanie na spoju
        cin >> tekst_oryginal; // wczytanie tekstu do spakowania
        cout << spakuj( tekst_oryginal ) << endl;
    }
}
P-171563
Gabes
» 2018-06-16 02:17:05
To nie Code Blocks ma problem!!!
P-171565
konishyapl
Temat założony przez niniejszego użytkownika
» 2018-06-16 12:12:07
@pefkos
int n = sprintf( slowo2 + k, "%d", licznik );
 przypisuje tylko pierwszą cyfrę licznika, w przypadku liczników dwucyfrowych pojawia się już problem, i nie wiem jak to naprawić

@mateczek mam code::blocks 16.01 a wersja gcc 4.9.2, jakiś jeszcze info potrzebujesz ?

C/C++
int main()
{
    string slowo;
    int liczba_testow;
    cin >> liczba_testow;
    while( liczba_testow-- )
    {
        cin >> slowo;
        char * slowo2 = new char[ slowo.length() ];
        int j = 0, k = 0, licznik = 0;
       
        while( j < slowo.length() )
        {
            if( slowo[ j ] != slowo[ j + 1 ] )
            {
                slowo2[ k ] = slowo[ j ];
                k++;
                j++;
            }
            else if( slowo[ j ] == slowo[ j + 1 ] )
            {
                slowo2[ k ] = slowo[ j ];
                k++;
                licznik++;
                do
                {
                    licznik++;
                    j++;
                }
                while( slowo[ j ] == slowo[ j + 1 ] );
               
                if( licznik > 2 )
                {
                    int n = sprintf( slowo2 + k, "%d", licznik );
                    k++;
                    j++;
                    licznik = 0;
                }
                licznik = 0;
            }
        }
        slowo2[ k ] = NULL;
        cout << slowo2 << endl;
       
       
       
       
    }
    return 0;
}
P-171572
« 1 » 2
  Strona 1 z 2 Następna strona