Aiuto Programma in C

di il
11 risposte

Aiuto Programma in C

Scrivere una funzione f(e main per chiamarla) che riceve una stringa, sostituisce tutti i caratteri minuscoli della stringa con il corrispondente carattere maiuscolo e stampa la stringa così modificata.
Questa è la consegna.
io ho provato a farlo in questo modo ma non gira e mi da diversi errori potete dirmi dov è che sbaglio? Grazie MIlle
#include <stdio.h>
#include <stdlib.h>
#define N 100
 char modifica_stringa(char stringa[]);
int main()
{ char stringa[N];
  char *modificata;
 
  
  
  printf("Inserisci stringa\n");
  scanf("%s", stringa);
  
  
  
  modificata = modifica_stringa( stringa );
  
  
  system("PAUSE");	
  return 0;
}
char modifica_stringa(char stringa[]){int n;
     
     for(n=0;n<N;n++){
                      if(stringa[n]>96 && stringa<123){ stringa[n]-32;
                      }
     return stringa
     
     }

11 Risposte

  • Re: Aiuto Programma in C

    Hai imparato le funzioni islower, toupper del header string.h?
    La funzione che hai indicato restituisce un carattere non un puntatore a carattere.
  • Re: Aiuto Programma in C

    skynet ha scritto:


    Hai imparato le funzioni islower, toupper del header string.h?
    La funzione che hai indicato restituisce un carattere non un puntatore a carattere.
    scusa sono un neo programmatore potresti spiegarti meglio, ho studiato le librerie, potresti darmi delle indicazioni su dove sbaglio e come modificarlo? grazie mille
  • Re: Aiuto Programma in C

    Il mio problema è capire come passare array dal main alla funzione e viceversa, e se possibile qualche esempio in codice... grazie scusate il disturbo... sono disperato
  • Re: Aiuto Programma in C

    L'esercizio non ti chiede di restituire una stringa ma solo di visualizzarlo dopo aver fatto i cambiamenti. La funzione per trasformare un carattere da minuscolo a maiuscolo si chiama toupper e si trova in string.h e quella per verificare se un carattere è minuscolo si chiama islower. per quello che ti dicevo di se avevi imparato l'uso e/o l'esistenza di queste funzioni. Non c'è bisogno di inventare controlli strani. Una cosa di questo tipo potrebbe fare a caso tuo
    
     if(islower(str[i])
        str[i] = toupper(str[i]);
    
    Controlla anche quà è un esempio quesi come il tuo esercizio
    http://www.cplusplus.com/reference/cctype/toupper
  • Re: Aiuto Programma in C

    skynet ha scritto:


    L'esercizio non ti chiede di restituire una stringa ma solo di visualizzarlo dopo aver fatto i cambiamenti. La funzione per trasformare un carattere da minuscolo a maiuscolo si chiama toupper e si trova in string.h e quella per verificare se un carattere è minuscolo si chiama islower. per quello che ti dicevo di se avevi imparato l'uso e/o l'esistenza di queste funzioni. Non c'è bisogno di inventare controlli strani. Una cosa di questo tipo potrebbe fare a caso tuo
    
     if(islower(str[i])
        str[i] = toupper(str[i]);
    
    Controlla anche quà è un esempio quesi come il tuo esercizio
    http://www.cplusplus.com/reference/cctype/toupper
    allora... il mio problema non è "come trasformare le minuscole in maiuscole" (dato che batsa sottrarre 32 al char facendo riferimento al ben noto codice ASCII). volevo creare una funzione, poichè sto lavorando ad un progetto assieme ad un'altra troupe di informatici, e come ben sai il vantaggio delle funzioni è quello, se mi intendi, di "dividersi il lavoro". dunque, dato che mi par di aver capito che le funzioni non possono passare un array direttamente al main, allora deduco che si debba passare un puntatroe ad array, però non mi viene...
  • Re: Aiuto Programma in C

    Con la tua funzione già passi il puntatore e quindi devi solamente modificare la funzione stessa in modo che non restituisca nulla. Sarà quindi void.

    Inoltre, quando fai la sottrazione del 32, devi assegnare nuovamente il risultato all'elemento dell'array, altrimenti lo perdi.

    Infine controlla la if perché manca un indice [n]

    Nel main, ovviamente non ci sarà nulla da assegnare. Il risultato lo vedrai nel main visualizzando la stringa.
    
    void modifica_stringa(char stringa[])
    {
         int n;
         
         for(n=0;n<N;n++)
             if(stringa[n]>96 && stringa[n]<123)
                 stringa[n] = stringa[n]-32;
    }
    
  • Re: Aiuto Programma in C

    OK vediamo adesso con la restituzione di una stringa da una funzione.
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    
    #define N 100
    
    char * modifica_stringa(char *stringa);
    
     int main()
     { 
    	char stringa[N];
         char *modificata = NULL;
    
    	printf("Inserisci stringa\n");
    	scanf("%s", stringa);
      
    	modificata = modifica_stringa( stringa );
    	
    	printf("%s\n",modificata);
    	free(modificata);
      
    	system("PAUSE");   
    	return 0;
     }
    
     char * modifica_stringa(char stringa[])
    {
    	int n;
    	int length = strlen(stringa);
    	char *temp = (char *)malloc(sizeof(char) *(length + 1));
    	for(n=0;n < length;n++)
    	{
    		if(islower(stringa[n]))
    			temp[n] = toupper(stringa[n]);
    		else
    			temp[n] = stringa[n];
    	}
    	temp[length] = '\0';
    	return temp;
    }
    
    Come vedi devi usare la memoria dinamica.
  • Re: Aiuto Programma in C

    skynet ha scritto:


    char *temp = (char *)malloc(sizeof(char) *(length + 1));
    Avrà già studiato l'allocazione dinamica ... ?
  • Re: Aiuto Programma in C

    Boh, tu che dici?
  • Re: Aiuto Programma in C

    skynet ha scritto:


    Boh, tu che dici?
    Ho mooolti dubbi ...
  • Re: Aiuto Programma in C

    oregon ha scritto:


    skynet ha scritto:


    Boh, tu che dici?
    Ho mooolti dubbi ...
    sto cercando di imparare un passo alla volta...cmq si ho letto qualcosina su questo argomento... vi ringrazio per le vostre risposte e consigli!!
Devi accedere o registrarti per scrivere nel forum
11 risposte