• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

UTF-8 i size_t szybka pomoc

Object Storage Arubacloud
0 głosów
156 wizyt
pytanie zadane 2 kwietnia 2017 w C i C++ przez chacken Użytkownik (820 p.)
Mamy na uczelni jakiegoś magistra co daje dosyć ciezkie zadania w porównaniu z innymi grupoami. Mam takie zadanie na uczelni:

Napisz funkcję wstrins pozwalającą na wstawienie do danego ciągu znaków innego ciągu. Ciągi te
mają być kodowane za pomocą kodowania UTF-8.
Funkcja wstrins ma posiadać następującą postać:
char* wstrins
(char* dest, size_t* dest_size, size_t where, char* src, size_t src_size);
gdzie:
dest ciąg docelowy,
dest_size wskaźnik na rozmiar ciągu docelowego w bajtach, także jako parametr wyjściowy,
where numer ZNAKU, za którym ma zostać wstawiony drugi ciąg,
src ciąg wstawiany,
src_size rozmiar ciągu wstawianego w bajtach,
return adres ciągu docelowego.

O ile rozumiem jak napisać funkcję łączą ciągi tak nie wiem jak zabrać sie za to UTF-8. Mógłby mi ktoś po krótce wytłumaczyć jak kodować znaki UTF-8 w języku C, tak żeby to zgadzało sie z tym zadaniem.

I prosiłbym również o jakas wskazówkę dotyczącą tego size_t. Nie rozumiem za bardzo tego zdania "wskaźnik na rozmiar ciągu docelowego w bajtach, także jako parametr wyjściowy,". Jak to ogarnąć? Jak to wykorzystać żeby działało.

Byłbym bardzo wdzięczny bo kompletnie nie rozumiem a zależy mi na dobrym zrobieniu tego zadania.

1 odpowiedź

0 głosów
odpowiedź 2 kwietnia 2017 przez j23 Mędrzec (194,920 p.)
wybrane 4 kwietnia 2017 przez chacken
 
Najlepsza

Zacznij od funkcji zwracającej długość bajtową poszczególych znaków:

size_t utf8char_len(const char *ch)
{
	if((*ch & 0x80) == 0)  return 1;
	if((*ch & 0xE0) == 0xC0) return 2;
	if((*ch & 0xF0) == 0xE0) return 3;
	if((*ch & 0xF8) == 0xF0) return 4;
	return 0;
}

Dzięki niej możesz iterować po znakach w ciągu:

size_t where = 4;
const char *p = "jakiś ciąg utf-8";
		
for(size_t i = 0; i < where; ++i)
	p += utf8char_len(p);

//p wskazuje na czwarty znak (licząc od zera)

Z resztą powinieneś dać sobię radę ;)

Podobne pytania

0 głosów
1 odpowiedź 1,796 wizyt
pytanie zadane 9 lipca 2015 w C i C++ przez Pascal Bywalec (2,720 p.)
0 głosów
2 odpowiedzi 554 wizyt
pytanie zadane 22 czerwca 2021 w C i C++ przez rottingham Nowicjusz (140 p.)
0 głosów
1 odpowiedź 1,181 wizyt

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...