Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C] Ordinamento stringhe

    Ciao a tutti,devo fare un programma nel quale un utente inserisce delle parole e il programma le restituisce in output ordinate lessicograficamente.
    Questo è il codice:

    codice:
    int main(int argc, char* argv[]){
    
    char **stringa; 
    char swap[15];
    int i=0,c,j,cont,k;
    
    printf("Quante parole vuoi inserire?");
    scanf("%d",&cont);
    
    stringa = (char**) malloc(sizeof(char*) * cont); 
    
    for(k=0;k<cont;k++){
    
    	printf("inserire parola: ");
    	scanf("%s",&swap);
    	
    		stringa[k] = (char*) malloc(sizeof(char) * strlen(swap));
    		strcpy(stringa[k],swap);
    }
    
    
    while(stringa[i+1]){               
    j=i;
    
    c = strcmp(stringa[i],stringa[i+1]);
    
    	if( c >= 0) {
    
    
    		strcpy(swap,stringa[i]);
    		strcpy(stringa[i],stringa[i+1]);
    		strcpy(stringa[i+1],swap);
    
    		while(j>0){
    				c = strcmp(stringa[j-1],stringa[j]);
    			
    				if(c >= 0){
    			
    						strcpy(swap,stringa[j-1]);
    						strcpy(stringa[j-1],stringa[j]);
    						strcpy(stringa[j],swap);
    					
    						j--;
    					
    				}
    			
    		else j--;
    	
    		}
                   	
    			i++;
    	}
    
    		else i++;
    		
    }
    }

    Quello che non capisco è perchè se creo un vettore dove inserisco io le parole funziona,se invece le faccio inserire all'utente no,mi da un problema di Stackdump.
    Grazie

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589

    Re: [C] Ordinamento stringhe

    codice:
    	scanf("%s",&swap);
    swap è un array (inquanto in c la striga è un array), un array può essere paragonato a un puntatore....
    quindi devi togliere l'& inquanto sennò passi l'indirizzo del puntatore alla stringa...


    codice:
    	scanf("%s",swap);
    così è corretto

    edit:
    an e manca anche
    codice:
    #include <stdio.h>
    #include <string.h>

  3. #3
    ciao,ho corretto l'errore dello scanf ma dopo aver inserito le parole mi da sempre l'errore di stackdump...non so perchè

  4. #4
    non c'è proprio nessuno che sa il perchè?

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    39
    codice:
    for(k=0;k<cont;k++){  	
    	printf("inserire parola: "); 	
    	scanf("%s",&swap); 	 		
    	stringa[k] = (char*) malloc(sizeof(char) * strlen(swap)); 
    	strcpy(stringa[k],swap); 
    }
    strlen ti da la lunghezza di una stringa; ma le stringhe sono sempre terminate da un carattere null... per cui devi allocare un posto in più per quel carattere, così:

    codice:
    stringa[k] = (char*) malloc(sizeof(char) * (strlen(swap)+1) );

  6. #6
    si hai ragione ora va,grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.