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

Problem z wskaznikami

Object Storage Arubacloud
0 głosów
218 wizyt
pytanie zadane 21 maja 2016 w C i C++ przez Ninja198 Początkujący (330 p.)

Witam .

Mam takie 3 zadania jeszcze do zrobienia a nie mam pojęcia jak się za nie zabrać ...

http://screenshot.sh/oBKdjTI50J6gx

int ilosc(char* t ,char b)
{
    char* c;
    cout<<c<<endl;
       
}

Jak się dobrać do poszczególnych elementów tego napisu ?

W 5 jak zamienić duże na małe ?

W 6 jak ma wyglądać ten nagłówek bo nie rozumiem ?

 

Za pomoc daje Naj . 

4 odpowiedzi

+1 głos
odpowiedź 21 maja 2016 przez mrcnsct Nałogowiec (36,390 p.)
edycja 21 maja 2016 przez mrcnsct
W 4 dostajesz wskaźnik do pierwszego elementu tablicy. Nagłówek funkcji int funkcja(char * tab, char x);  Więc masz tablicę, nie trzeba tworzyć żadnej nowej tablicy (dostajesz wskaźnik do pierwszego elementu tablicy znaków, więc jak rozumiem, ta tablica już istnieje). Do jej elementów odnosisz się tab[i]. W pętli przechodzisz po niej całej, warunek w for to: tab[i]!='\0' (bo tym jest zakończona tablica znaków). Przy wywołaniu funkcji jako parametr podajesz nazwę tablicy (która jest wskaźnikiem na pierwszy element) oraz znak, którego wystąpienia chcesz zliczać.

W 5 ponownie dostajesz wskaźnik na pierwszy element, tak samo operujesz na tablicy. W niej sprawdzasz, czy znak jest małą literą (czy jest większy lub równy 'a' i mniejszy lub równy 'z'), jeśli tak to zmieniasz ją na dużą. Możesz na przykład odjąć od niego ('a'-'A'), czyli np. tab[i]=tab[i]-('a'-'A'). Jest tak dlatego, że odległość litery dużej od małej w tabeli ASCII jest stała (równie dobrze można by odjąć ('b'-'B') ). Z dużych na małe to dodanie ('a'-'A'). Sprawdź tabelę ASCII.

W 6 nagłówek int* funkcja(int *p, int *k). Mając adres pierwszego i ostatniego elementu tablicy możesz obliczyć ilość elementów w tablicy (arytmetyka wskaźnikowa). Do znalezienia maksymalnego elementu w tablicy użyj pętli. Do pomocniczej zmiennej zapisz wartość pierwszego elementu i w pętli porównuj ją z kolejnymi, jeśli któraś jest większa to ją zapisz do zmiennej pomocniczej. Użyj też zmiennej pomocniczej do przechowywania indeksu tablicy. Na początek ustaw ją na wartość 0, a jeśli któraś wartość jest większa od tej w pierwszej zmiennej pomocniczej, to do tej drugiej zapisuj nowy indeks, odpowiadający tej wartości. Zwróć adres elementu pod tym indeksem.
0 głosów
odpowiedź 21 maja 2016 przez Avernis Nałogowiec (27,400 p.)
odnośnie 5 to funkcja toupper, a jak chcesz się dostać do wskaźnika to używasz * a nie samej nazwy wskaśnika
0 głosów
odpowiedź 21 maja 2016 przez niezalogowany

int ilosc(char* t ,char b)
{
    char* c;
    cout<<c<<endl;
       
}

to pokazuje adres na który aktualnie wskazuje c. *c to wyświetlenie wartości. Jeśli chcesz zrobić tablicę robisz tak:

char *c= new char[rozmiar];

rozmiar może być zmienną albo stałą, to zależy od Ciebie.

poza tym pokazałeś za mało kodu więc niezbyt Ci pomożemy

komentarz 21 maja 2016 przez niezalogowany
edycja 21 maja 2016
Jeśli c wskazywałby na literał znakowy(co przy obecnej deklaracji wskaźnika byłoby niezgodne ze standardem), albo na jakąś tablice char z tekstem to wyświetlony zostałby ten literał znakowy a nie adres. Wynika to z tego że tak jest przeciążony operator << dla char*
komentarz 21 maja 2016 przez niezalogowany
coś źle napisałem?? bo nie kumam
komentarz 21 maja 2016 przez niezalogowany
Mój komentarz dotyczy tego: "to pokazuje adres na który aktualnie wskazuje c. *c to wyświetlenie wartości."
komentarz 21 maja 2016 przez niezalogowany
no tak, powinien wskazywać na inną zmienną typu char albo tablicę, albo alokować nową zmienną albo tablicę
0 głosów
odpowiedź 21 maja 2016 przez Ninja198 Początkujący (330 p.)
edycja 21 maja 2016 przez Ninja198
Hmm nie wiem jak to wytłumaczyć... Mogłby ktoś mi zrobić choć to zadanie 4 ? Bo pilnie jest mi potrzebne ...A czas goni..

A jak nie zrobić to powiedzieć choć ty dobrze myślę czy w zadania 4 chodzi o to :

#include <iostream>

using namespace std;

int ilosc(char* t ,char b)
{
    cout<<"Podaj wielkosc tablicy: ";
    int n;
    cin>>n;
    t=new char[n];
    for(int i=0;i<n;i++)
    {
        cin>>t[i];
    }
    
    int ile=0;
    for(int i=0;i<n;i++)
    {
        if(t[i]==b)
        ile++;
    }
    
    return ile;
}

int main()
{
char t;
    cout<<ilosc(&t,'b');
    
}
komentarz 21 maja 2016 przez niezalogowany
jak dla mnie to zrobiłeś to prawidłowo ale wydaje mi się że nie powinieneś przesyłać literki b tylko to co poda użytkownik

Podobne pytania

0 głosów
1 odpowiedź 188 wizyt
pytanie zadane 12 stycznia 2016 w C i C++ przez Gryfin123 Początkujący (260 p.)

92,579 zapytań

141,431 odpowiedzi

319,657 komentarzy

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

...