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

    Ordinamento Stringa di caratteri in C

    Buon giorno a tutti, non riesco a compilare questo programma mi da sempre segmentation fault, lo scopo di questo esercizio è che non avendo capito ancora bene l'uso di doppio puntatori ho implementato un esercizio "prova" per scambiare i caratteri in ordine alfabetico.
    esempio:
    input: ciao
    output: acio

    input: prova
    output: aporv

    ecco il codice:

    codice:
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<ctype.h>
    void BubbleSort_string(char **s,int n);
    void visualizza(char *s,int n);
    
    int main(){
    
    	char s[100];
    	int i,n=0,c;
    	
    	while ((c=getchar()!='\n')){
    	     s[i]=c;
    	      i++;
    	      n++; //lunghezza della stringa
    	}
    	s[i]='\0';
    	
    	
    	BubbleSort_string(&s,n);
    
    
    	// visualizzo i caratteri in ordine alfabetico
    	  for (i=0;i<n;i++){
    		printf(" %c ",s[i]);
                }
    		
            
    	
    	  return 0;
    }
    
    void BubbleSort_string(char **s,int n){
    
    	int i=0,flag;
    	int temp;
    
       do {
    
    	flag=0;
    	 for (i=0;i<n-1;i++){
    		if (*s[i]>*s[i+1]){
    		    temp=*s[i];
    		    *s[i]=*s[i+1];
    		    *s[i+1]=temp;
    			flag=1;
    		 }
    	  }
        }
           while (flag==1);
    }
    /* messaggio del compilatore

    warning: passing argument 1 of ‘BubbleSort_string’ from incompatible pointer type

    */

    in Generale se voglio scambiare i caratteri di una stringa o muovere i caratteri da una posizione all'altra devo sempre utilizzare il doppio puntatore?

  2. #2
    Utente di HTML.it L'avatar di XBarboX
    Registrato dal
    Dec 2008
    Messaggi
    121
    ma perchè usi i puntatori? non puoi semplicemente scrivere s[i] ???

  3. #3
    ho pensato e provato ad implementare senza i puntatori, ma ho visto che lo scambio non avviene, avevo letto da qualche parte che per muovere le stringhe dalla memoria occorre usare il doppio puntatore,altro esempio:http://www.c.happycodings.com/Sortin...ing/code6.html
    Siccome il concetto del "doppio puntarore" non è che ho capito ancora bene ho provato ad implentare un esercizio che muovesse i caratteri nella memoria.
    Lo scopo dell'esercizio è appunto capire bene come e quando usare il doppio puntatore.

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    56
    Beh tieni conto che il tipo char è come un int, quindi ti basta un singolo puntatore.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non è assolutamente necessario utilizzare un doppio puntatore ...

    Ma devi cominciare a rivedere il codice che hai scritto perchè presenta errori importanti per il resto del funzionamento

    1) la variabile i non è inizializzata prima dell'uso

    2) la riga

    while ((c=getchar()!='\n')){

    non è corretta
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.