Kezdőoldal » Számítástechnika » Programozás » Miért van az, hogy C++-ban...

Miért van az, hogy C++-ban stringekkel működnek az ékezetes karakterek, char típusú változókkal meg nem?

Figyelt kérdés

Ez így műküdik és az a[0] char típus (nem pedig mondjuk wchar_t), aminek az értéke nálam -61:

#include <iostream>

#include <typeinfo>


int main() {

std::string a = "á";

std::cout << a << '\n';

std::cout << static_cast<int>(a[0]) << '\n';

std::cout << typeid(a[0]).name() << '\n';

}

Ez viszont nem működik, és itt intként kiíratva nálam -95:

#include <iostream>


int main() {

char a = 'á';

std::cout << a << '\n';

std::cout << static_cast<int>(a) << '\n';

}


Miért van az, hogy a felső példában -61, az alsóban meg -95 az á karakter kódja?



2021. ápr. 6. 22:37
 1/9 anonim ***** válasza:
100%

A char csak 8 bit, és valami ökörséget csinál amikor az a á betűt pakolod bele.

A másik viszont utf-8 lesz.

2021. ápr. 6. 22:45
Hasznos számodra ez a válasz?
 2/9 anonim ***** válasza:

Megnéztem, c3a1 az utf-8 hexakódja a á betűnek.

Ha úgy paszírozom be 8 bitbe, hogy a c3-at levágom, ki is jön a -95(a1 hex).


A -61 nem tudom hogy jött össze.

2021. ápr. 6. 22:57
Hasznos számodra ez a válasz?
 3/9 anonim ***** válasza:
Na az meg a c3 lesz. Ne kérdezd, miért csinál a stringnél azt belőle. Sizeof-fal írasd már ki, hogy milyen hosszú az inted? Bár fura lenne ha 1 byte lenne. De ha igen, akkor konvertáld int helyett long-nak.
2021. ápr. 6. 23:09
Hasznos számodra ez a válasz?
 4/9 anonim ***** válasza:
Tedd be ezt a kódodba és menni fog: setlocale(LC_ALL, "hun");
2021. ápr. 7. 00:14
Hasznos számodra ez a válasz?
 5/9 A kérdező kommentje:
rextester.com g++ fordítójába illesztettem be a fenti kódot, ott jött ki a -61
2021. ápr. 7. 00:21
 6/9 anonim ***** válasza:

Az a te bajod, hogy a[0] elemet kasztolod intté, meg íratod ki.

A string operator[] egy bájtot ad vissza, vagyis az első bájtját a sztringnek, de az á betű az két bájtos (ha nagyon egyben akarod kezelni, akkor lehet a[0]<<8 | a[1] az int értéke, ez már két felhasznált bájt a 4 bájtos intből. Kis varázslás, de így sem biztos, hogy az történik majd, amit te akarsz.).

Ha chart akarsz belőle, van a sztring osztálynak c_str függvénye, ami char alapú nullterminált karakterláncot ad vissza, szerintem az kell neked.

2021. ápr. 7. 00:42
Hasznos számodra ez a válasz?
 7/9 A kérdező kommentje:

Akkor már így csinálnám, de így meg kérdőjel íródik ki a karakter helyett.


#include <iostream>

#include <typeinfo>


int main() {

std::wstring a = L"á";

std::wcout << a << '\n';

std::wcout << static_cast<int>(a[0]) << '\n';

std::wcout << typeid(a[0]).name() << '\n';

}

2021. ápr. 7. 09:05
 8/9 anonim ***** válasza:

Mert a konzol nem ismeri ezt az ékezetet.

setlocale(LC_ALL, "hun");

és a konzolban meg olyan betűtípus kell, amit támogat

2021. ápr. 7. 16:57
Hasznos számodra ez a válasz?
 9/9 A kérdező kommentje:

Próbáltam ezt is. Ugyanúgy kérdőjel. Mindegy, majd utánaolvasok, hátha...

[link]

[link]

[link]

2021. ápr. 8. 00:02

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!