Ricerca in un array di stringhe

di il
1 risposte

Ricerca in un array di stringhe

In pratica io ho un array di stringhe (cognomi) definito in questo modo:
 
char **allocaC(int dim){
	char **cognomi;
	cognomi=(char**)malloc(sizeof(char*)*dim);
	int i;
	for (i=0;i<dim;i++){
		cognomi[i]=(char*)malloc(sizeof(char)*30); 
		 cognomi[i][0]=' ';
	}
	return cognomi;
}
dato un cognome la funzione dovrebbe ritornare la posizione del cognome se presente nell'array mentre se non è presente dovrebbe ritornare -1.
Vi metto il codice della funzione (probabilmente mi da errore la strcmp).

int posCognome(char **cognomi,char *cognome, int dim){
	int i,ctrl=0;
	for (i=0;i<dim-15;i++){
		ctrl=strcmp(cognomi[i],cognome);
		if (ctrl==0){
			return i;
		}
	}
	return -1;
}
qui vi metto il codice della funzione completa (anche se è ancora da terminare) cosi vedete se ho fatto qualche errore da qualche altra parte:

// 20 nomi e cognomi, dire per ogni cognome  i nomi corrispondenti
//suppongo nome+cognome=max 30 caratteri

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char **allocaC(int dim);
char ***allocaN(int dim);
void separa(char *persona,char *nome,char *cognome);
int posCognome(char **cognomi,char *cognome,int dim);
int insCognome(char *cognome,char **cognomi,int dim);

int main(int argc,char *argv[]){
	int dim=20,ctrl=0;
	char **cognomi,***nomi;
	cognomi=allocaC(dim);
	nomi=allocaN(dim);
	char buf[30];
	char *persona,*cognome,*nome;
	cognome=(char*)malloc(sizeof(char)*30);
	nome=(char*)malloc(sizeof(char)*30);
	int pos;
	while (1){
		printf("inserisci nome e cognome: ");
		persona=fgets(buf,30,stdin);
		ctrl=strcmp(persona,"FINE LISTA");
		if (ctrl==0){
			break;
		}
		separa(persona,nome,cognome);
		printf("nome: %s\n",nome);
		printf("cognome: %s\n",cognome);
		pos=posCognome(cognomi,cognome,dim);
		printf("pos: %d",pos);
		if (pos==-1){
			pos=insCognome(cognome,cognomi,dim);
		}
	}
}

char **allocaC(int dim){
	char **cognomi;
	cognomi=(char**)malloc(sizeof(char*)*dim);
	int i;
	for (i=0;i<dim;i++){
		cognomi[i]=(char*)malloc(sizeof(char)*30); 
		 cognomi[i][0]=' ';
	}
	return cognomi;
}

char ***allocaN(int dim){
	char ***nomi;
	nomi=(char***)malloc(sizeof(char*)*dim);
	int i,j;
	for (i=0;i<dim;i++){
		nomi[i]=(char**)malloc(sizeof(char*)*dim); 
		for (j=0;j<dim;j++){
			nomi[i][j]=(char*)malloc(sizeof(char));
		}
	}
	return nomi;
}

void separa(char *persona,char *nome,char *cognome){
	char temp;
	int i=0,pos=0;
	int lun;
	lun=strlen(persona);
	while (1){
		temp=persona[i];
		if (temp<=32){
			break;
		}
		nome[pos]=temp;
		pos++;
		i++;
	}
	pos=0;
	i++;
	
	while (1){
		temp=persona[i];
		cognome[pos]=temp;
		pos++;
		i++;
		if (i>lun-1){
			break;
		}
	}
	printf("ciao \n");
}

int posCognome(char **cognomi,char *cognome, int dim){
	int i,ctrl=0;
	for (i=0;i<dim-15;i++){
		ctrl=strcmp(cognomi[i],cognome);
		if (ctrl==0){
			return i;
		}
	}
	return -1;
}

int insCognome(char *cognome,char **cognomi,int dim){
	int i;
	char ctrl;
	for (i=0;i<dim;i++){
		ctrl=strcmp(cognomi[i],NULL);
		if (ctrl!=0){
			strcpy(cognomi[i],cognome);
			printf("inserimento cognome: %s",cognomi[i]);
			return i;
		}
	}
	
	return -1;
}

1 Risposte

  • Re: Ricerca in un array di stringhe

    Non so se puoi fare una roba del genere, perchè morta la funzione alloca cognomi, muoiono con se anche tutte le variabili al suo interno(in questo caso cognomi in allocaC), e anche le allocazioni saranno solo garbage nella memoria.


    Ora provo a farlo anche io questo esercizio e poi posto
Devi accedere o registrarti per scrivere nel forum
1 risposte