Funkcja działająca tak jak strupr

0

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

0

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).

0

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ł

0

Myślę, że w poleceniu chodzi o tą funkcję https://fresh2refresh.com/c-programming/c-strings/c-strupr-function/

0

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 :​)

0
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 potraktuj toupper. 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/

0

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ć.

0

Czy da się to zrobić nie używając wskaźników?

0

Tak, zastąp wskaźnik tablicą. W pętli while ustaw warunek sprawdzający czy aktualny znak różni się od '\0'.

0

Ale jak podmieniać małe litery na duże nie użuwając toupper?

0

Sprawdzając kolejno kod liczbowy danej litery.

0

I od każdego kodu litery muszę odjąć 32?

0

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?

0
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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1