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) #include <iostream> #include <string> #include <cstdlib>
using namespace std;
int main() { string slowo = "aaaalibbbbbbbabaaa", slowo2 = " "; 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; }
|
|
pekfos |
» 2018-06-13 15:16:08 |
|
mateczek |
» 2018-06-13 20:22:17 slowo2[ k ] = licznik + '0'
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. |
|
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 |
|
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. |
|
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 #include <iostream> #include<string> using namespace std; string spakuj( string & oryginalString ) { string wynikowy; return wynikowy; }; int main() { string tekst_oryginal; int LiczbaTestow; cin >> LiczbaTestow; while( LiczbaTestow-- ) { cin >> tekst_oryginal; cout << spakuj( tekst_oryginal ) << endl; } }
|
|
Gabes |
» 2018-06-16 02:17:05 To nie Code Blocks ma problem!!!
|
|
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 ? 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; }
|
|
« 1 » 2 |