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

Problem z liczeniem znakow w lancuchu

0 głosów
260 wizyt
pytanie zadane 19 grudnia 2016 w C i C++ przez Don Corleone Obywatel (1,210 p.)

Witam, napisalem funkcje ktora ma liczyc znaki w lancuchu a konkretnie cyfry,litery,spacje oraz dlugosc calego lancucha. Z grubsza wydaje sie wszystko ok lecz niestety wyniki wychodza dalekie od prawdy, prosilbym o pomoc:)

Dodatkowo dodam ze nie moge uzywac funkcji typu isspace,issdigit,issalpha itp, musze to zrobic bez ich uzycia.

#include <stdio.h>
#include <stdlib.h>
#define MAX 100

void licz(char *str[MAX],int *dlugosc,int *cyfry,int *litery,int *spacje)
{
    *dlugosc=0;
    *cyfry=0;
    *litery=0;
    *spacje=0;
    for(int i=0; i<MAX; i++)
    {
        if(str[i]>=0&&str[i]<=255)
        *dlugosc=*dlugosc+1;
        if(str[i]>=48&&str[i]<=57)
        *cyfry=*cyfry+1;
        if(str[i]>=65&&str[i]<=122)
        *litery=*litery+1;
        if(str[i]==32)
        *spacje=*spacje+1;


    }

}


int main()
{
    int dlugosc=0,cyfry=0,litery=0,spacje=0;
    char str[MAX] = "Przykladowy 7test7 do 8liczenia8";
    licz(&str[MAX],&dlugosc,&cyfry,&litery,&spacje);
    printf("D:%d\n C:%d\n L:%d\n S:%d\n", dlugosc,cyfry,litery,spacje);
    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 19 grudnia 2016 przez degrek Bywalec (2,380 p.)
wybrane 19 grudnia 2016 przez Don Corleone
 
Najlepsza

naprawione:

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

void licz(char *str,int *dlugosc,int *cyfry,int *litery,int *spacje)
{
    *dlugosc=0;
    *cyfry=0;
    *litery=0;
    *spacje=0;
    for(int i=0; str[i]!= NULL; i++)                //petla niech sie skonczy na dlugosci napisu a nie na 100
    {
        if(str[i]>=0&&str[i]<=255)
            *dlugosc=*dlugosc+1;
        if(str[i]>=48&&str[i]<=57)
            *cyfry=*cyfry+1;
        if(str[i]>=65&&str[i]<=122)
            *litery=*litery+1;
        if(str[i]==32)
            *spacje=*spacje+1;


    }

}


int main()
{
    int dlugosc=0,cyfry=0,litery=0,spacje=0;
    char *str = "Przykladowy 7test7 do 8liczenia8"; //wystarczy wskaznik na napis, a nie tablica[100] znakow ktora zasze bedzie miec dlugosc 100, wiec bezsensowne jest liczenie jej dlugosc skoto podajesz ja jako 100
    licz(str,&dlugosc,&cyfry,&litery,&spacje);
    printf("D:%d\n C:%d\n L:%d\n S:%d\n", dlugosc,cyfry,litery,spacje);
    return 0;
}

 

komentarz 19 grudnia 2016 przez Don Corleone Obywatel (1,210 p.)
Ok wszystko pieknie dziala, tylko takie moje dodatkowe pytanie dlaczego przy wysylaniu lancucha do funkcji nie wstawiamy przy nim znaku '&'?

Chodzi mi o tą linie kodu:

licz(str,&dlugosc,&cyfry,&litery,&spacje);
komentarz 20 grudnia 2016 przez degrek Bywalec (2,380 p.)
Na łańcuch znaków wskazuje wskaznik " char str*" czyli przypisane zostaje do niego adres pierwszego wyrazu z łańcucha znaków. Zatem mamy tam adres łańcucha i ten adres przekazujemy do funkcji.
komentarz 20 grudnia 2016 przez Don Corleone Obywatel (1,210 p.)
ok fajnie dzieki

Podobne pytania

0 głosów
1 odpowiedź 494 wizyt
0 głosów
1 odpowiedź 623 wizyt
pytanie zadane 28 grudnia 2016 w C i C++ przez vega Użytkownik (510 p.)
0 głosów
1 odpowiedź 971 wizyt
pytanie zadane 27 grudnia 2016 w C i C++ przez Don Corleone Obywatel (1,210 p.)

93,607 zapytań

142,530 odpowiedzi

322,999 komentarzy

63,098 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

Kursy INF.02 i INF.03
...