[c++] jak zamienic liczby na tekst?

WaldekChlor
Użytkownik
Użytkownik
Posty: 26
Rejestracja: 24 gru 2010, o 00:09
Płeć: Mężczyzna
Podziękował: 7 razy
Pomógł: 1 raz

[c++] jak zamienic liczby na tekst?

Post autor: WaldekChlor »

Witam, będę wdzięczny za wskazówkę. Mam zaimplementowaną kolejkę liczb i chciałbym zamienić je np. na ciągi liter. Jak to zrobić? Wiem, że w struct można wtedy wpisać np. char dane[10] zamiast "int dane", ale co dalej?

Oto kod :

Kod: Zaznacz cały

#include <iostream>
using namespace std;

struct element
{
int dane;
element* nast;
};


element* pocz=NULL;
element* konc=NULL;



void menu();
void wypisz(element* pocz);
void dodajnapoczatku(element*&pocz, int wart );
void dodajnakoncu(element*&konc, int wart );
int main()
{

       menu();
       return 0;
}

void menu()
{
       int wybor;
       int liczba;
       do
       {

               cout << endl << endl;
               cout << "1. Wypisz" << endl;
               cout <<"2. Dodaj na poczatku" << endl;
               cout <<"3. Dodaj na koncu" << endl;
               //cout <<"4. Usun na poczatku" << endl;
               //cout <<"5. Usun na koncu" << endl;



               cout << "0. Zakoncz" << endl;

               cout << endl;
               cout << "Twoj wybor" << endl;

               cin >> wybor;
               if(wybor==1) wypisz(pocz);

               else if(wybor==2)
               {
                       cout<<"Podaj dane: ";
                       cin >> liczba;
                       dodajnapoczatku(pocz, liczba);
               }

               else if(wybor==3)
               {
                       cout<<"Podaj dane: ";
                       cin >> liczba;
                       dodajnakoncu(konc, liczba);

               }
               }while(wybor>0);
}

       void wypisz(element* pocz)
       {
               element *wsk;
               if(pocz==NULL) cout << endl << "Lista jest pusta" << endl;
               else
               {
                       cout << endl << "Zawartosc listy" << endl;
                       wsk=pocz;
                       do
                       {
                               cout << wsk->dane << endl;
                               wsk = wsk->nast;
                               
                       }while(wsk!=NULL); 
               }
       };

       void dodajnapoczatku(element*&pocz, int wart)
       {
               element* wsk;
               if (pocz==NULL)
               {
                       pocz=new element;
                       pocz->dane=wart;
                       pocz->nast=NULL; 
               }
               else
               {
                       wsk=new element;
                       wsk->dane=wart;
                       wsk->nast=pocz;
                       pocz=wsk;
               }
       };

               void dodajnakoncu(element*&konc, int wart )
       {
               element* wsk;
               if (pocz==NULL)
               {
                       pocz=new element;
                       pocz->dane=wart;
                       pocz->nast=NULL;
               }
               else
               {
                       wsk=pocz;
                       while(wsk->nast!=NULL) wsk=wsk->nast;
                       wsk->nast=new element;
                       wsk=wsk->nast;
                       wsk->dane=wart;
                       wsk->nast=NULL;
               }

       };
Będę bardzo wdzięczny za pomoc.
wawek91
Użytkownik
Użytkownik
Posty: 795
Rejestracja: 2 cze 2010, o 08:56
Płeć: Mężczyzna
Lokalizacja: Tarnów
Podziękował: 14 razy
Pomógł: 66 razy

[c++] jak zamienic liczby na tekst?

Post autor: wawek91 »

Ale chcesz zrobić nową kolejkę ciągów liter czy mając te liczby zamienić je np: 123 -> jeden dwa trzy?

PS: Jak C++ to radzę stosować stringi zamiast tablic znakowych tak jak to było w C.
Crizz
Użytkownik
Użytkownik
Posty: 4094
Rejestracja: 10 lut 2008, o 15:31
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 12 razy
Pomógł: 805 razy

[c++] jak zamienic liczby na tekst?

Post autor: Crizz »

Najwygodniej będzie użyć klasy ostringstream albo stringstream:

Kod: Zaznacz cały

ostringstream a;
int b=10;
a << b;
string b=a.str();
String b zawiera podaną liczbę 10. Wspomniane klasy są zdefiniowane w bibliotece sstream. Można też skorzystać ze starszej metody: funkcji sprintf, dostępnej w cstdio.
PMichalak
Użytkownik
Użytkownik
Posty: 125
Rejestracja: 29 paź 2009, o 20:03
Płeć: Mężczyzna
Lokalizacja: Kalisz
Podziękował: 1 raz
Pomógł: 16 razy

[c++] jak zamienic liczby na tekst?

Post autor: PMichalak »

Istnieje też funkcja void itoa(int value, char *text, int base), która robi włąśnie to czego szukasz.
WaldekChlor
Użytkownik
Użytkownik
Posty: 26
Rejestracja: 24 gru 2010, o 00:09
Płeć: Mężczyzna
Podziękował: 7 razy
Pomógł: 1 raz

[c++] jak zamienic liczby na tekst?

Post autor: WaldekChlor »

Dziękuję serdecznie za odpowiedzi. Próbuję kombinować z tymi stringami, ale wcześniej nie miałem z tym do czynienia i nie mam o bladego pojęcia jak to zrobić.
Póki co mam coś takiego:

Kod: Zaznacz cały

#include<iostream>
#include<string>
#include<sstream>

using namespace std;

struct element
{
string imie;
element* nast;
};



element* pocz=NULL; // miejsce wskazujace na poczatek listy
element* konc=NULL;

void menu();
void wypisz(element*pocz);
void dodajnapoczatku(element*&pocz, string imie);
void dodajnakoncu(element*&konc, string imie);

int main()
{
       menu();
       return 0;
}

void menu()
{
       int wybor;
       string imie;
       do
       {

               cout << endl << endl;
               cout << "1. Wypisz" << endl;
               cout <<"2. Dodaj na poczatku" << endl;
               cout <<"3. Dodaj na koncu" << endl;


               cout << "0. Zakoncz" << endl;

               cout << endl;
               cout << "Twoj wybor" << endl;

               cin >> wybor;
               if(wybor==1) wypisz(pocz);

               else if(wybor==2)
               {
                       cout<<"Podaj jakies imie: ";
                       cin >> imie;
                       dodajnapoczatku(pocz, imie);
               }
               
               else if(wybor==3)
               {
                       cout<<"Podaj jakies imie: ";
                       cin >> imie;
                       dodajnakoncu(konc, imie);
               }
               
               

       }while(wybor>0);
}

void wypisz(element* pocz)
       {
               element *wsk;
               if(pocz==NULL) cout << endl << "Lista jest pusta" << endl;
               else
               {
                       cout << endl << "Zawartosc listy" << endl;
                       wsk=pocz;
                       do
                       {
                               cout << wsk->imie << " "<< cout << wsk->imie << " ";
                               wsk = wsk -> nast;
                               
                       }while(wsk!=NULL); 
               }
       };
       
       
       
       void dodajnapoczatku(element*&pocz, string imie)
       {
               element* wsk;
               char wart;
               if (pocz==NULL) //lista jest pusta
               {
                       pocz=new element;
                       pocz->imie=wart;
                       pocz->nast=NULL;
               }
               else
               {
                       wsk=new element; //utworzenie elementu
                       wsk->imie=wart;
                       wsk->nast=pocz;
                       pocz=wsk;
               }
       };

   void dodajnakoncu(element*&konc, string imie )
       {
        char wart;
               element* wsk;
               if (pocz==NULL) //lista jest pusta
               {
                       pocz=new element;
                       pocz->imie=wart;
                       pocz->nast=NULL;
               }
               else
               {
                       wsk=pocz;
                       while(wsk->nast!=NULL) wsk=wsk->nast;
                       wsk->nast=new element;
                       wsk=wsk->nast;
                       wsk->imie=wart;
                       wsk->nast=NULL;
               }

       };
I zwraca mi dziwolągi zamiast literek... mogę prosić o jakąś wskazówkę jeśli chodzi o te stringi?
Crizz
Użytkownik
Użytkownik
Posty: 4094
Rejestracja: 10 lut 2008, o 15:31
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 12 razy
Pomógł: 805 razy

[c++] jak zamienic liczby na tekst?

Post autor: Crizz »

Czyli jednak nie chodzi o zamianę liczby na napis, tak? Chcesz po prostu w liście przechowywać łańcuchy znaków?

Kod: Zaznacz cały

void dodajnapoczatku(element*&pocz, string imie)
       {
               element* wsk;
               char wart;
               if (pocz==NULL) //lista jest pusta
               {
                       pocz=new element;
                       pocz->imie=wart;
                       pocz->nast=NULL;
               }
               else
               {
                       wsk=new element; //utworzenie elementu
                       wsk->imie=wart;
                       wsk->nast=pocz;
                       pocz=wsk;
               }
       };
Wytłumacz mi, jaką sensowną wartość ma zmienna wart i po co Ci ona, skoro masz zmienną imie.

(wszystkie porady w postach powyżej oczywiście nieaktualne, bo dotyczą innego problemu)
WaldekChlor
Użytkownik
Użytkownik
Posty: 26
Rejestracja: 24 gru 2010, o 00:09
Płeć: Mężczyzna
Podziękował: 7 razy
Pomógł: 1 raz

[c++] jak zamienic liczby na tekst?

Post autor: WaldekChlor »

Crizz pisze:Czyli jednak nie chodzi o zamianę liczby na napis, tak? Chcesz po prostu w liście przechowywać łańcuchy znaków?
Tak . Przepraszam za wcześniejsze niesprecyzowanie problemu.
Crizz pisze:Wytłumacz mi, jaką sensowną wartość ma zmienna wart i po co Ci ona, skoro masz zmienną imie.

(wszystkie porady w postach powyżej oczywiście nieaktualne, bo dotyczą innego problemu)
Ano fakt... dziękuję za spostrzeżenie, już usunąłem to "wart" .

Problem zapewne błahy, ale ja mam z tym problem, to moja pierwsze praca z kolejkami... siedzę już pół dnia i dalej nie mogę wymyślić jak się wstawia litery. Będę wdzięczny za wszystkie wskazówki.
Crizz
Użytkownik
Użytkownik
Posty: 4094
Rejestracja: 10 lut 2008, o 15:31
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 12 razy
Pomógł: 805 razy

[c++] jak zamienic liczby na tekst?

Post autor: Crizz »

WaldekChlor pisze: i dalej nie mogę wymyślić jak się wstawia litery.
Ale gdzie, w co chcesz wstawiać litery? Sprecyzuj bardziej swój problem.
ODPOWIEDZ