Funkcja licząca znaki

0

Witam musze napisać funkcje zliczajacą w ciagu wszystkie litery i liczby napisalem tak jak poniżej i program dziala jednak mam wyciagnac funkcje zliczajaca przed maina i umiem wyciagnac tak aby zliczała konkretną wartość ale nie zbiór wartości np ('a' && 'z') czy może ktoś pomóc przerobić?

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

main()
{
      char s[80];
      int i,licz,lit,inne;
      
      puts("Podaj ciag");
      gets(s);
      
      licz=0;
      lit=0;
      inne=0;
      
      for(i=0;i<strlen(s);i++){
      if(s[i]>='A' && s[i]<='Z' || s[i]>='a' && s[i]<='z'){
                   lit++;}}
      if(lit!=0){
                 printf("ilosc liter %d\n", lit);
                 }
      for(i=0;i<strlen(s);i++){
      if(s[i]>'0' && s[i]<='9'){
                  licz++;}}
      if(licz!=0){      
                  printf("ilosc liczb %d:\n",licz);
                  }
       for(i=0;i<strlen(s);i++){
      if(s[i]>32 && s[i]<=47){
                  inne++;}}
      if(inne!=0){      
                  printf("ilosc innych %d:\n",inne);
                  }
                  
                 

system("pause");
return 0; 
} 
0

konkretną wartość czyli np ma policzyć np wszystkie występowania litery z? wtedy będzie

if (s[i]=='z') znak++;

Zamiast 'z' możesz naturalnie dać jakąś zmienną typu char np żeby użytkownik mógł sam zdecydować co policzyć. No chyba że o coś innego to wtedy doprecyzuj.

0

to wiem tylko ma policzyć w sumie znaki wszystkie litery
czyli ma robic to co robi ten co napisalem tylko funkcje trzeba wyciagnac z maina
jak ja wyciagam funkcje z maina to wyskakuje mi caly czas ze ilosc liter =0

0

A o to chodzi. No to masz 2 możliwości: uczynić licz, lit, oraz inne zmiennymi globalnymi, lub też napisać funkcję która "zwróci" potrzebną liczbę. Tablica też albo globalna, lub wysyłasz do funkcji albo ją (wtedy funkcja będzie musiała ją "zwrócić", bo dostanie kopie a nie samą tablicę) albo wskaźnik na 1-wszy element (aczkolwiek nie jestem pewien czy w tym przypadku uda się sprawdzenie rozmiaru) . Generalnie funkcja nie ma dostępu do tego co w main-ie, musisz o tym pamiętać.

0

pomyśl. Twój kod nie jest zły. Dosłownie wystarczy przenieś fragment kodu i nadać funkcji dobrą nazwę, np:

int policzLitery(const char *s) {
    int lit = 0;
    for(i=0;i<strlen(s);i++){
        if(s[i]>='A' && s[i]<='Z' || s[i]>='a' && s[i]<='z'){
            lit++;
        }
    }
    return lit;
}

Edit: szkoda, że ten kod ma złożoność o(n^2) zamiast o(n)

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