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

Wskaźniki, tablice, zamiana małych liter na duże

Object Storage Arubacloud
0 głosów
1,163 wizyt
pytanie zadane 24 stycznia 2017 w C i C++ przez Jedyn Obywatel (1,200 p.)
edycja 24 stycznia 2017 przez Jedyn

Witam. Mam napisać funkcję która jako parametr dostaje wskaźnik do zmiennej typu char (pierwszy element tablicy), znak NULL oznacza koniec ciągu znaków. Zadaniem tej funkcji jest konwersja małych liter na wielkie (inne znaki pozostają bez zmian).

Napisałem coś takiego: 

 

using namespace std;
char funkcja(char *wsk)
{
	for (int i = 0; i < 6, *wsk != '0'; i++, *wsk++)
	{
		cout << toupper(*wsk) << " ";
	}
	
	return *wsk;
}



int main() {

	
	char tab[6] = {'a','b','c','D','0','0'};
	char *wskk;
	wskk = &tab[0];
	cout << funkcja(wskk) << endl;
	cout << toupper('b');
	


	char k;
	cin >> k;

	return 0;
}

Rozumiem ,że jak argumentem ma być wskaźnik to nie możemy podać np tab? Najpierw trzeba stworzyć wskaźnik, przypisać do niego tab i dopiero dać jako argument?
A głowny problem polega na tym, że chciałbym wyświetlić duże litery a nie kod ASCII.

EDIT. Już wiem, zrzutowałem (char)toupper(*wsk) i wszystko działa ale zostawiam pytanie bo może istnieje jakaś inna metoda bez konieczności rzutowania?

komentarz 28 kwietnia 2022 przez Oscar Nałogowiec (29,290 p.)
edycja 28 kwietnia 2022 przez Oscar

Znak o kodzie 0 w ASCII nazywa się NUL.

A wracając do kodu - nie bardzo rozumiem po co tam jest zmienna i w pętli. Przecież nie jest nigdzie używana. W pętli for można dać puste wyrażenia

for ( ; *wsk ; wsk++)

Funkcja toupper zwraca wynik typu int - stąd operator << wypisuje liczby a nie znaki. Możnaby zrzutować na char, ale przecież ta funkcja nie ma wypisywać napisu a dokonać jego konwersji - zamienić w napisie literki małe na wielkie.

void str2upper(char *wsk)
{
    for ( ; *wsk ; wsk++)
    {
        *wsk = (char)toupper(*wsk);
    }
}

No i jeszcze przydałoby się zabezpieczenie przez podaniem NULL jako argument.

Inne uwagi już są w pozostałych wpisach.

 

PS. I jeszcze coś.

Taka deklaracja nie tworzy napisu w stylu C:

    char tab[6] = {'a','b','c','D','0','0'};

Bo brakuje kodu 0 kończącego napis.

Lepiej będzie tak:

    char tab[] = "abcD00";

Z tym, że teraz sizeof(tab) wynosi 7.

2 odpowiedzi

+1 głos
odpowiedź 24 stycznia 2017 przez Dexterim Dyskutant (8,370 p.)
Mozesz przekazać tab jako argument bo odpowiada ona wskaźnikowi na tą tablice. Jeśli chcesz wyświetlić duże litery po prostu zrzutuj na char()
+1 głos
odpowiedź 24 stycznia 2017 przez bartolinciu Dyskutant (7,580 p.)

1. W funkcji funkcja() pętlę fo można uprościć:

size_t length = strlen(wsk);
for( size_t i = 0; i < length ; i++ ){
cout << ( char ) toupper( wsk[i] ) << " ";
}

strlen jest bodajże z biblioteki cstring

2. '0' nie oznacza znaku NULL on oznacza dokładnie znak 0 czyli kod ascii 48 znak null zapisuje się '\0' i w tablicy ascii ma on kod 0

Podobne pytania

0 głosów
1 odpowiedź 2,313 wizyt
pytanie zadane 27 kwietnia 2015 w C i C++ przez andrzejugdziejestes Początkujący (390 p.)
0 głosów
1 odpowiedź 1,664 wizyt
0 głosów
1 odpowiedź 153 wizyt
pytanie zadane 26 kwietnia 2017 w C i C++ przez benzulli Użytkownik (720 p.)

92,551 zapytań

141,400 odpowiedzi

319,531 komentarzy

61,938 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!

...