Programowanie C
Petr: Jezyk C . Napisz program,który liczy ile po wpisaniu ciągu znaków jest cyfr a ile liter.
Jakies propozycje ? Zgóry dzieki
8 lis 13:06
Dziadek Mróz:
...
#define SIZE 32
char *napis = (char *)malloc(32 * sizeof(char));
printf("Napis: "); scanf("%32s", napis);
size_t ile_cyfr = 0;
size_t ile_liter = 0;
size_t i;
for (i = 0; i < SIZE; i++)
{
if (napis[i] >= '0' && napis[i] <= '9')
{
ile_cyfr++;
}
if ((napis[i] >= 'A' && napis[i] <= 'Z') ||
(napis[i] >= 'a' && napis[i] <= 'z'))
{
ile_liter++;
}
}
...
opcja 2:
...
ile_cyfr += napis[i] >= '0' && napis[i] <= '9' ? 1 : 0;
ile_liter += (napis[i] >= 'A' && napis[i] <= 'Z') ||
(napis[i] >= 'a' && napis[i] <= 'z') ? 1 : 0;
...
8 lis 13:17
Petr: Dzieki, ale generalnie nie rozumiem cos ty zrobil na początku
char *napis = (char *)malloc(32 * sizeof(char));
printf("Napis: "); scanf("%32s", napis);
sizet ilecyfr = 0;
sizet ileliter = 0;
8 lis 13:23
jc: Proponuję coś takiego:
#include <stdio.h>
#include <ctype.h>
int main(){
char napis[100];
int i;
int litery = 0;
int cyfry = 0;
scanf("%99s", napis);
for(i=0; napis[i]; i++){
if(isdigit( napis[i] )) cyfry++;
if(isalpha( napis[i] )) litery++;
}
printf("%d %d\n", cyfry, litery);
return 0;
}
8 lis 13:50
Petr: bardziej zrozumiała propozycja
8 lis 13:57
Petr: przypomnij mi co to było isdigit i isalpha w ctype.h
8 lis 13:59
jc: A jak myślisz, co to może być?
8 lis 14:02
Petr: cos zwiazanego z analizą znaków, ten isalpha do liter a isdigit z tego co widzę do cyfr.
8 lis 14:04
Adamm: isalpha − czy jest literą
isdigit − czy jest cyfrą
8 lis 14:28
Dziadek Mróz:
Ja hołduję zasadzie, że jak ktoś chce się nauczyć programowania to niech się uczy podstaw,
znajduje własne rozwiązanie problemu, a gdy u zna że jest wystarczająco wyszkolony to użyje
gotowych funkcji typu isalpha i isdigit. Wykładowca spyta co robi dana funkcja to nie będzie
wiedział.
Jak w tej rymowance:
...
A Dziad wiedział,
nie powiedział...
8 lis 22:31