Funkcja która ma zliczac dlugosc i wartosc dostarczonego "chara"

0

Witam,

Zwracam się do Was z problemem, a mianowicie o wyjasnienie, jak zrozumiec, jak rozwiazac takie zadanie:

Mamy funkcje bool xxx ( char* wrt){
Która ma zwracac wartosc true, jezeli dlugosc jest rowna wartosci dostarczonego ciagu znakow, nie mozna uzywac zadnych zewnetrznych funkcji.

Zacząłem tak

bool xxx(char* wrt)
{
    int wartosc = 0;
    int dlugosc = 0;
    int dlugosc1 = 0 bool x = true;
    bool y = false;

    while (*(wrt + dlugosc) != '/0')
        dlugosc++;

    while (*(wrt + dlugosc1) != "/0") {
        wartosc += wrt[dlugosc1];
        dlugosc1++;
    }
    if (dlugosc == wartosc)
        return x;
    else
        return y;
}

Tak wygląda to co wymyslilem, jezeli chodzi o dlugosc, to wydaje mi sie, ze jak najbardziej dobrze.. natomiast jezeli chodzi o wartosc, to nie do konca wiem jak to rozumowac... wiec napisalem jak napisalem.
Dlatego chcialbym zaczerpnac od Was troszke wiedzy :)

Pozdrawiam,
Yaxley

2
Yaxley100 napisał(a):

dlugosc jest rowna wartosci dostarczonego ciagu znakow

Co to w ogóle znaczy? Daj jakiś przykład.

PS: Fatalne formatowanie kodu - jak nie umiesz sam to przepuść to przez http://format.krzaq.cc

0

Kod przepuscilem, a co do przykladu to sam nie jestem w stanie dac, bo sam tego nie do konca rozumiem..
Mialem dzisiaj takie zadanie na kolokwium i liczylem, ze u Was uzyskam jakas informacje..

Pisze z pamieci, jezeli chodzi o tresc zadania, ale znajomy tak zapamietal:

"Wartość Chara wprowadzonego w argumencie odpowiada długości tekstu"

2

Są następujące możliwości:

  1. funkcja xxx przyjmuje dwa argumenty i jej drugim argumentem jest długość, którą musisz sprawdzić
  2. zapamiętałeś zadanie poprawnie, a prowadzący nie ma pojęcia o czym mówi

W pierwszym przypadku po prostu sprawdź sobie długość stringa (odległość znaku \0 od jego początku) i porównaj z podaną przez użytkownika.

0

No tak, ale dlugosc sprawdzam i zapisuje w zmiennej "dlugosc"

while (*(wrt + dlugosc) != '/0')
        dlugosc++;

tylko nie wiem jak rozumiec ta wartosc...

1

Napisz sobie pierw funkcję obliczającą długość stringa - czyli odpowiednik strlen.

0
int mystrlen1(char* tab1)
{
    int dlugosc = 0;
    while (*(tab1 + dlugosc) != '\0')
        dlugosc++;
    cout << dlugosc << endl;
    return dlugosc;
}

Już, co dalej??

1

Pomijając drobne błędy (zbędny print, char* zamiast char const*), jest ok.

Teraz napisz funkcję xxx:

bool xxx(char const* str, int expected_length);

Sprawdź:

assert(xxx("ala ma kota", 11) == true);
assert(xxx("ala nie ma kota", 11) == false);

Zauważ, że w zadaniu nie ma słowa o tym, że nie możesz definiować własnych funkcji pomocniczych.

0

Nie do końca wiem, jak się za to zabrać, może jutro ze świeżą głową..
Póki co uciekam, ale dziękuje za odzew :)

0
kq napisał(a):

Pomijając drobne błędy (zbędny print, char* zamiast char const*), jest ok.

Teraz napisz funkcję xxx:

bool xxx(char const* str, int expected_length);

Sprawdź:

assert(xxx("ala ma kota", 11) == true);
assert(xxx("ala nie ma kota", 11) == false);

Zauważ, że w zadaniu nie ma słowa o tym, że nie możesz definiować własnych funkcji pomocniczych.

Ale chodziło o wypelnienie ciała funkcji.
poza tym, do funkcji byl tylko jeden argument dostarczany, wiec nie rozumiem, w ktora strone idziemy.
assert to rozumiem funkcja, ktora ma wywolywac funkcje xxx?

2

Pewnie, ale to Twoje zadanie. Dostałeś podpowiedź - teraz Twoja kolej ;)

assert to makro/funkcja używane do weryfikacji poprawności programu. http://en.cppreference.com/w/cpp/error/assert

0

No okej :)
Tylko co ta funkcja ma robic, ta xxx, jak mozesz jeszcze podpowiedziec :)

4

Ma porównać ilość znaków w stringu - którą umiesz policzyć, jak pokazałeś wcześniej - z liczbą podaną w drugim argumencie.

3
bool cmp(const char *str)
  {
   unsigned value=0;
   while(*str) value+=*(str++)-'0'-1;
   return !value;
  }

o to się rozchodzi?

0

Całkiem możliwe, można prosić o jakieś wytłumaczenie?
Chodzi mi o ten kawalek kodu -

value+=*(str++)-'0'-1;
   return !value;
1

no to mów czego nie rozumiesz:

  1. +=
  2. ++
  3. *
  4. !
  5. '0'
  6. return
0

do zmiennej value, dodajemy wskaznik str++ i co dalej, nie rozumiem za bardzo tego '0' i dlaczego zwracamy "!value"

2

Do poczytania:

  1. Operator wyłuskania '*'
  2. Operatory inkrementacji przedrostkowej a przyrostkowej
  3. Kodowanie znaków ASCII (zwłaszcza kody cyfr)
  4. Automatyczna konwersja liczb na wartość logiczną (bool)

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