Przekazywanie tablicy do funkcji przez adres, fgets

0

Witam, mam do zrobienia następujące zadanie:

title

Kombinuję i mam taki kod:

#include <iostream>
#include <cstdio>

using namespace std;

int dlugosc(char *tablica)
{
    int dlugosc = 0;
    for (int i=0; i<100;i++)
    {
        if ((tablica[i]>='a' && tablica[i]<='z') || (tablica[i]>='A' && tablica[i]<='Z'))
            dlugosc ++;
    }
    return dlugosc;
}

int main()
{
    char tablica[100];
    cout << "Enter a string: ";
    fgets (tablica,sizeof(tablica),stdin);
    cout << "Dlugosc: " << dlugosc(tablica);
    return 0;
}

I teraz pytania:

  1. W jaki sposób poprawnie przekazać argument tablica do funkcji przez adres? Obecnie wydaje mi się, że jest źle, ale po dodaniu ampersanta (dlugosc(&tablica);) lub gwiazdek przy każdym wystąpieniu "tablica" w funkcji dlugość, program się nie kompiluje. Nie potrafię znaleźć konkretnych informacji dot. takiego przekazywania tablic - wszędzie tylko są pojedyncze zmienne, dlatego prosiłbym o wytłumaczenie, jak należy to prawidłowo robić
  2. Dlaczego funkcja nieprawidłowo zlicza liczbę liter w tablicy? Po wpisaniu np. słowa kot, funkcja dlugosc zwraca 26, zamiast 3.

Z góry proszę o wyrozumiałość, bo jestem mocno początkujacy w programowaniu i po prostu mam problem z niektórymi zagadnieniami ;d

1
  1. Tak jak robisz jest poprawnie. Używając & musiałbyś zrobić to tak
dlugosc(&tablica[0]);
  1. Wpisałem "kot" i zwróciło 3.
1

Przekazywanie tablicy jest ok.
Jeżeli wczytasz coś sobie od użytkownika do tablicy, to na końcu zostanie dodany specjalny znak nowej linii '\n'. Czyli najprościej:

        if (tablica[i] != '\n')
            dlugosc ++;
        else break;

Albo dodaj else break w swoim kodzie, żeby przerwać zliczanie gdy napis się skończy.

0

Dzięki za pomoc. Rzeczywiście, teraz zwraca poprawnie. Do tej pory myślałem, że znak \0 jest dodawany automatycznie na końcu tablicy (czyli w komórce 100), a z tego jak działa obecnie program wnioskuję, że jest on po prostu w kolejnej komórce po ostatnim znaku wprowadzonego tekstu ;)

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