[C++]Konwersje typów :)

Klawisz95

Użytkownik
Dołączył
Styczeń 24, 2010
Posty
54
Witam!

Otóż zaczołem się interesować C++ i stawiam sobie pytanie...

Zakładając że mamy tak zadeklarowane zmienne:
Kod:
char c[];
int i;

Pytania:
1. Jak przekonwertować dane z i do c?
2. Jak przekownertować dane z c do i?
3. Jak sprawdzić ilosć znaków znajdujących się w c?


I jeszcze jedno...
Mamy 2 ciągi znaków ( char a[]; char b[]; ). Jak skleić je ze sobą?
 

grzonu

Były Moderator
Dołączył
Grudzień 26, 2006
Posty
1390
atoi() - konwertuje int na char*
itoa() konwertuje char* na int

pamietaj o wczesniejszym zaalokowaniu miejsca na zmienna char* ;)
 

discovery44

Były Moderator
Dołączył
Sierpień 14, 2007
Posty
763
Kod:
#include <iostream>
using namespace std;
int main(){
  char c[] = "E";
  int i = 70;
 cout << "c = " << c << endl;
 cout << "i = " << i << endl;
  // konwersje //
   cout << "c jako int = " << int(c) << endl;
   cout << "i jako char = " << char(i) << endl;
  // w wygodniejszym dla poczatkujacych stylu konwersji z jezyka C //

      // ile znakow ma zmienna c? //
    cout << "Zmienna c ma " << sizeof(c) - 1 /* bajt 0 odejmuje */ << " znakow." << endl;
// sklejanie
// do sklejania słuzy funkcja strcpy ale jej nie lubie i jest nie wygodna w uzyciu dlatego na poczatek
// odradzam Ci jej uzywania i radze abys zapoznal sie z klasa string do operacji tekstowych
  string nowy;
  char a[] = "test123";
  char b[] = "cokolwiek";
  nowy = a;
  nowy += b;
cout << "Obiekt string nowy ma w sobie: " << nowy << endl;
}
 

RobertG

Użytkownik
Dołączył
Styczeń 3, 2007
Posty
391
EDIT: eh za długo pisałem :))

1,2:
Kod:
#include <iostream>

int main(){
    char c[] = {'a', 'b'};
    int i;

    i = static_cast<int>(c[0]);
    c[0] = static_cast<char>(i);
}
http://www.cplusplus.com/doc/tutorial/typecasting/

3:
Kod:
#include <iostream>

int main(){
    char c[] = {'a', 'b'};
    std::cout << (sizeof(c)/sizeof(c[0])) << std::endl;
}
4. IMHO w C++ lepiej użyć klasy string.

Kod:
#include <iostream>
#include <string>

int main(){
    char foo[] = {'a', 'b'};
    char bar[] = {'d', 'b', 'w', 'd'};

    std::string foo_, bar_, foobar_;
    foo_.assign(foo, sizeof(foo)/sizeof(foo[0]));
    bar_.assign(bar, sizeof(bar)/sizeof(bar[0]));
    foobar_ = foo_ + bar_;

    std::cout << foobar_  << std::endl;

    // by zkonwertowac do char[] sluzy foobar_.c_str();
}
 
Ostatnia edycja:

Klawisz95

Użytkownik
Dołączył
Styczeń 24, 2010
Posty
54
Szczerze mówiać - to nie jestem taki nowy. Mam spore (pięcio-letnie doświadczenie) jeżeli chodzi o programowanie, bo znakomicie znam się na Delphi / Pascalu :)

Osobiście - wolę strcpy(), bo nie chcę mieszać sobie do programów stringi :)
Co do odliczania ilości znaków - dobre to :) Nie pomyślałem o sizeof().

Wiedziałem też że ostatni znak to \0. Bo tym się kończy ciągi znaków, tym bardziej jak wcześniej nie deklarujemy ich długości

// Edit!

I mam pytanie jeszcze jedno...
funkcja itoa składa się z 3 argumentów.
itoa(int, char*, int);

Mam coś takiego w programie:
Kod:
int i=4;
char temp;

itoa(i, temp, 1);

Program się od razu zamyka, bez żadnego błedu. Jak dam jako trzeci argument liczbę 0, to wywali bład. A jak dam większą niż 1, to będzie wszystko git. Co daje ten trzeci argument?

Dobra. Poradziłem sobie. Trzeci argument - to system w jakim ma przepisać liczbę... :D
 
Ostatnia edycja:
Do góry Bottom