Mam do napisania funkcję, która zachowuje się tak samo jak funkcja strupr z biblioteki <string.h> Niestety nie mam pojęcia jak się za to zabrać. Proszę o jakiekolwiek wskazówki
Przyjmujesz wskaźnik na początek ciągu znaków. Sprawdzasz kolejne znaki tak długo aż nie napotkasz znaku o wartości 0
. Zwracasz liczbę znaków, które sprawdziłeś (nie licząc ostatniego).
Pomyliłem się z tematem, funkcję strlen już zrobiłem. Chodziło mi o strupr .Napisałem dobrze treść wątku ale temat mi się pomieszał
Myślę, że w poleceniu chodzi o tą funkcję https://fresh2refresh.com/c-programming/c-strings/c-strupr-function/
Ok, czyli zakładając, że to to, to po prostu masz zamienić wszystkie znaki w stringu na ich odpowiedniki uppercase, o ile takie są. W takim razie iteruj po stringu do napotkania 0
, każdy znak potraktuj toupper
. koniec :)
kq napisał(a):
Ok, czyli zakładając, że to to, to po prostu masz zamienić wszystkie znaki w stringu na ich odpowiedniki uppercase, o ile takie są. W takim razie iteruj po stringu do napotkania
0
, każdy znak potraktujtoupper
. koniec :)
Czy to na pewno załatwi sprawę? Nie chciałem korzystać z gotwców tylko zrobić to na piechotę, tego chyba od nas wymaga ćwiczeniowiec. Znalazłem coś takiego w internecie ale nie rozumiem do końca zapisu bo nie mieliśmy jeszcze wskaźników.
char* moje_strupr(char* src)
{
if (strlen(src)==0) return src;
char* dst = new char[strlen(src)];
for (int i=0; i<strlen(src); i++)
if ((src[i]>='a')&&(src[i]<='z')) dst[i]=src[i]-32; else dst[i]=src[i];
dst[strlen(src)]=0;
return dst;
}
Link do strony gdzie to znalazłem: http://forum.komputerswiat.pl/topic/125631-c-strlen-strupr-strcpy/
Dlaczego nie użyjesz toupper
? Spodziewałbym się, że ta funkcja nie będzie alokowała nowego stringa, tylko będzie działać na podanym.
Ja to bym widział bardziej tak:
char* strupr(char* in)
{
char* ret = in;
while(*in) {
*in = toupper(*in);
in++;
}
return ret;
}
jak musisz samodzielnie implementować wszystko, to toupper
i tak zrób jako osobną funkcję, zamiast wszystko do jednej pakować.
Czy da się to zrobić nie używając wskaźników?
Tak, zastąp wskaźnik tablicą. W pętli while ustaw warunek sprawdzający czy aktualny znak różni się od '\0'
.
Ale jak podmieniać małe litery na duże nie użuwając toupper
?
Sprawdzając kolejno kod liczbowy danej litery.
I od każdego kodu litery muszę odjąć 32?
Jest to jeden ze sposobów. Natomiast nie zawracałbym sobie tym głowy - jest toupper()
, korzystaj z tego - śmiało. Jeżeli w poleceniu nie masz jasno napisane, że nie wolno Ci używać takiej funkcji to po co sobie komplikować życie?
Tomek Nadrowski napisał(a):
Czy da się to zrobić nie używając wskaźników?
O ile nie chcesz bawić się w referencje do tablic i szablony to nie.