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;
}