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 |
|
carlosmay |
» 2016-08-01 01:25:26 Nie da się porównać tablicy ze zmienną. Nazwa tablicy to adres. 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'; } 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'). |
|
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? |
|
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. int main() { char ch_1 = 'a'; char ch_2 = 'b'; string str; str.push_back( ch_1 ); 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. |
|
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"? |
|
carlosmay |
» 2016-08-01 11:43:16 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). |
|
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. |
|
karambaHZP |
» 2016-08-01 14:08:57 Formatuj kod znacznikami.
Do porównania łańcuchów, gdzie jeden jest cstringiem użyj strcmp |
|
1 « 2 » 3 |