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

rzutowanie za pomocą operatora static_cast

Ostatnio zmodyfikowano 2016-08-03 00:20
Autor Wiadomość
latajacaryba
Temat założony przez niniejszego użytkownika
» 2016-08-01 01:12:36
Ahhh ok. Zrozumiałem :) ale żeby już nie tworzyć kolejnego tematu, to zapytam o jeszcze jedną rzecz. Dlaczego kiedy korzystamy ze string to nie mogę korzystać z operatora porównania == ? np.

char a='a';
string b;
cin>>b;
if(b==a){...}

ps. jeśli nie da się tego obejść to jak mogę korzystać z typu, który przechowuje więcej niż 1 znak, char i wchar_t odpadają z wiadomych względów
P-150446
carlosmay
» 2016-08-01 01:25:26
Nie da się porównać tablicy ze zmienną. Nazwa tablicy to adres.

C/C++
int main()
{
    string str { "a" };
    char ch = 'a';
    if( str[ 0 ] == ch ) {
        cout << "rowne\n";
    }
   
    if( str[ 1 ] == '\0' ) {
        cout << "drugim znakiem w tablicy str jest znak konca stringa: \0" << '\n';
    }
    cout << str.capacity() << '\n'; // <-- tak można sprawdzić jaka jest faktyczna długość stringa
}

Nie pamiętam czy można tak sprawdzać koniec stringa, bo jest to poza jego rozmiarem, ale znak zerowy do niego należy.
Wewnętrznie jest to tablice char - minimum dwa elementy (znak 'a' oraz znak '\0').
P-150447
latajacaryba
Temat założony przez niniejszego użytkownika
» 2016-08-01 01:48:37
Super, dzięki za wyjaśnienie, ostatnie pytanko jeszcze ;)

zobrazuje moje pytanie

a=5
b=9

i co zrobić by c=59?

albo

char x='a', y='b';
co zrobić by z=ab? oraz jakiego bedzie typu? string?
P-150448
carlosmay
» 2016-08-01 01:57:31
Nie ma znaczenia czy będzie to tablica typu char czy string.
W obu przypadkach da się to wykonać. Na stringu będzie wygodniej.
C/C++
int main()
{
    char ch_1 = 'a';
    char ch_2 = 'b';
    string str;
    str.push_back( ch_1 ); // metoda push_back dodaje znaki na koniec stringa
    str.push_back( ch_2 );
    cout << str << '\n';
}
Jeśli zrobisz to na tablicy char lub tablicy liczb, musisz ręcznie dodawać znaki do odpowiednich elementów tablicy.
Możesz skorzystać z gołej tablicy i ręcznie dodawać poszczególne cyfry,
albo skorzystać z std::vector<> i dodawać cyfry lub znaki jak w przypadku stringa.

Musisz dopasować sobie sposób do potrzeb i do sposobu wprowadzania danych.
P-150449
latajacaryba
Temat założony przez niniejszego użytkownika
» 2016-08-01 11:18:41
no tak, można zrobić tablicę char. Dzięki za wyjaśnienie. Temat zamykam :)
ps. albo jeszcze nie. jeszcze jedno. Nie mogę porównać stringa z tablicą, bo chcę porównać zmienną z adresem, ale dlaczego mogę porównać zmienną typu int z tablicą? np.

int a=1;
int tablica[2]{1,2};
if(a==tabl[0]) {std::cout<<"a=tabl[0]";}
dokladnie tak samo jest z char

char x='a';
char tabl[2]{'a','b'};
if(x==tabl[0]){...}

więc dlaczego tylko string "ma problemy"?
P-150452
carlosmay
» 2016-08-01 11:43:16
if( a == tabl[ 0 ] )
To jest porównanie zmiennej z pierwszym elementem tablicy, a nie z adresem tablicy.
Operator
[]
 wyłuskuje wartość (nie adres).
if( a == tabl )
 - to jest porównanie adresu ze zmienną (oczywiście to jest błąd).
P-150453
latajacaryba
Temat założony przez niniejszego użytkownika
» 2016-08-01 12:33:40
ale kiedy pisałem
string str
char tabl{'a','b'}
cin>>i;
if(str==tabl){...}

też nie działa, chociaż i to zmienna typu int więc jest to porównanie z i elementem tablicy.
P-150454
karambaHZP
» 2016-08-01 14:08:57
Formatuj kod znacznikami.

Do porównania łańcuchów, gdzie jeden jest cstringiem użyj strcmp
P-150459
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona