Skip to content

Instantly share code, notes, and snippets.

@erenon
Created October 28, 2010 20:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save erenon/652235 to your computer and use it in GitHub Desktop.
Save erenon/652235 to your computer and use it in GitHub Desktop.
probaNZH f3
#include <stdio.h>
#include <stdlib.h>
int *evszamok(char k[], int *meret) {
int i=0, j=0, state=0, evszam = 0, m=0, cm=0;
int *evszamok = NULL, *evszamok2 = NULL;
while(k[i]){
switch(state){
case 1: //1 jegy?
if ('0' < k[i] && k[i] <= '9') {
evszam = 1000*(k[i]-'0');
state = 2;
} else {
state = 0;
}
break;
case 2: //2 jegy?
if ('0' <= k[i] && k[i] <= '9') {
evszam += 100*(k[i]-'0');
state = 3;
} else {
state = 0;
}
break;
case 3: //3 jegy?
if ('0' <= k[i] && k[i] <= '9') {
evszam += 10*(k[i]-'0');
state = 4;
} else {
state = 0;
}
break;
case 4: //4 jegy/pont?
if ('0' <= k[i] && k[i] <= '9') {
evszam += (k[i]-'0');
state = 5;
} else if( k[i] == '.') {
evszam /= 10;
if( evszam >= 895 && evszam <= 2010 ) m++;
state = 0;
} else {
state = 0;
}
break;
case 5: //pont?
if (k[i] == '.') {
if( evszam >= 895 && evszam <= 2010 ) m++;
}
state = 0;
break;
case 0: //szokoz?
default:
evszam = 0;
if (k[i] == ' ') {
state = 1;
}
break;
}
if (m > cm) {
//enlarge ... array!
evszamok2 = (int *)malloc(m*sizeof(int));
for(j=0;j<cm;j++) {
evszamok2[j] = evszamok[j];
}
evszamok2[j] = evszam;
cm = m;
evszamok = evszamok2;
}
i++;
}
*meret = m;
return evszamok;
}
int main(){
int m,i;
char konyv[] = "894. 2010. 2012. foo. magyarorszag tortenelmevel. foglalkozo konyv, 1986. ez nem datum:2006 ez viszont igen: 895. meg ezis: 2010.";
int *evsz;
evsz = evszamok(konyv, &m);
for(i=0;i<m;i++){
printf("%d\n", evsz[i]);
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment