Jak użyć stringu?

Mam taki oto program:

#include 

#include 


using namespace std;

int main()

{

char znak[6]="D";

int tablica[32];

int liczba=45;

int i = 0;

int zm_pom;  

int r; 


   do

   {

      zm_pom = liczba / 16;

      if(zm_pom=13)

      {

           liczba=znak[6];

      }

      tablica[i] = zm_pom;

      liczba = liczba % 16;

      i++;

   }

  while(liczba > 0);

  cout<<"Podana liczba :\n\n";

  for(i =i-1; i >= 0; --i)

  cout <<"\t"<< tablica[i]<< " " ;


  cin>>r; //Tylko żeby program sie nie wyłączał odrazu

  return 0;

}

Probelm w tym ze nie wiem jak zrobic aby w momencie gdy zmienna zm_pom bedzie rowna 13 na ekranie wyswietlila mi sie litera D a nie 13.

Na początku dodaj:

#include , a przed return (0); linijkę: “getch();” wtedy program poczeka na wciśnięcie klawisza, a dopiero później się wyłączy.

OK, wszystko fajnie,tylko że program jest jakiś taki… bez sensu? :expressionless:

Jakbyś napisał, co ten program ma robić to by na pewno umożliwiłoby nam Ci jakoś pomóc. Masz mnóstwo dziwnych przypisań zmiennych, wszystko jest mocno pogmatwane a jedynym efektem tego programu jest wypisanie na ekran kilkanaście razy liczby “13” poprzedzonej nic nie mówiącym napisem “Podana liczba to:” Na ekran nigdy nie dostaniesz litery bo cała tablica jest typu integer więc co najwyżej możesz mieć na ekranie liczbę całkowitą…

Dobra to moze tak:

#include 

#include 

#include 


using namespace std;

int main()

{


int tablica[32];// <-???????

int liczba=45;

int i = 0;

int zm_pom;  


   do

   {

      zm_pom = liczba % 16;

      if(zm_pom==13)

      {

           //???????         

      }

      tablica[i] = zm_pom;

      liczba = liczba / 16;

      i++;

   }

  while(liczba > 0);

  cout<<"Podana liczba :\n\n";

  for(i =i-1; i >= 0; --i)

  cout <<"\t"<< tablica[i]<< " " ;

  getch();

  return 0;

}

Program ma zamieniac liczbe z systemu dziesietnego na szesnastkowy. Jest to tylko czesc programu. Chodzi mi tylko o to co zrobic gdy przy podzieleniu liczby 45 gdy pozostaje 13 reszty nie wyswietlalo mi 13 tylko odpowiadajaca jej w systemie hex litery D. Z reszta liter ABCEF juz sobie analogcznie poradze. I co w takim razie z ta tablica?

http://www.cppreference.com/ i http://www.cplusplus.com/ twoimi przyjacielami. To będzie:

char(55 + reszta)

To http://pl.wikipedia.org/wiki/ASCII pomoże Ci zrozumieć to rozwiązanie.

Poza tym wyrzuć to conio.h, a zamiast getch() daj system(“pause”). Co jak co, ale na pewno nie używałbym rad Nicki.

Sorry ale i tak nie za bardzo czaje:( Moglbys mi to moze pokazac na jakims przykladzie? :slight_smile:

Dziekuje za te przyklady troche zrozumialem dzialanie tego stringu ale dalej nie mam pojecia jak podstawic jakas litere za liczbe do mojej tablicy.

Po pierwsze w temacie masz “Jak użyć stringu” więc zastosowałem go zamiast tablicy intów, bo miałeś tam znaki zapytania w komentarzu. Oto przerobiony kod:

#include 

#include 


using namespace std;


int main() {

	string hexNumber;

	int liczba = 45;

	int tmp = 0;


	do {

		tmp = liczba % 16;

		if(tmp >= 0 && tmp <= 9)

			hexNumber.insert(0, 1, char('0' + tmp)); // string& insert( size_type index, size_type num, char ch );

		else

			hexNumber.insert(0, 1, char('7' + tmp));

		liczba /= 16;

	} while(liczba > 0);


	cout << "Podana liczba " << liczba << " to szestnastkowo " << hexNumber << endl;

}

I teraz wyjaśnienia. Musisz wiedzieć, że klasa string i tak korzysta z tablic znaków - char. Po drugie dobrze jest wiedzieć co to jest ASCII gdyż jest ono używane przez C++. Po trzecie znaki można traktować w szczególny sposób jako liczby - właśnie jako ich kody ASCII. Dlatego aby uzyskać znaki od ‘A’ do ‘F’ używam:

char('7' + tmp)

tmp zawiera resztę z dzielenia przez szesnaście, np. 13. Tak więc jest tam ‘7’ + 13. Co oznacza 55 + 13 - sprawdź, ‘7’ ma kod 55 w ASCII. Wynik to 68, sprawdź co znajduje się pod tym kodem w tabeli kodu ASCII… W komentarzu umieściłem deklarację funkcji z klasy string, której użyłem, więcej dowiesz się z http://www.cppreference.com/index.html . Tak w ogóle to wiem, że ten programik ma pokazać jak robić konwersję, ale cały ten kod jest zbędny w codziennym programowaniu, wystarczyłoby napisać:

cout << "Liczba " << 47 << " to szestnastkowo " << hex << 47 << endl;

w ciele funkcji main. hex to manipulator strumieni, pochodzi ze standardowej przestrzeni nazw, więc jest to std::hex. Zmienia on sposób wyświetlania liczb na format szesnastkowy.

Teraz juz kumam :smiley:

WIELKIE DZIĘKI nr47. :slight_smile: