Risolto come faccio a rendere la stringa in maiuscolo? in c

emina

Utente Iron
18 Maggio 2021
25
6
7
19
Ultima modifica:
ciao community ho bisogno di un aiuto, sono bloccato;
Si scriva un programma in linguaggio C che legga una stringa di lettere da tastiera.
La stringa può essere lunga al massimo 56 caratteri.


1: Rendere la stringa tutta minuscola (considerando le lettere): utilizzare la proprietà
della tabella ASCII3 per la quale le lettere maiuscole dell’alfabeto si trovano tutte
alla medesima “distanza” dal loro corrispettivo minuscolo
2 : rendere la stringa in maiuscolo
3: eliminare dalla stringa tutti i caratteri diversi.


sono rimasto bloccato qui: come potrei continuare?
C:
include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int main (){

FILE *filePTR;
 char riga [57];
 
 filePTR= fopen ("file.txt","r");
       if (filePTR==NULL) {
             printf("il file non é stato aperto correttamente");
              return 1;
             }

             while (!feof(filePTR))
            {
         fgets(riga,57,filePTR);
         printf("%s",riga);
                                 }
          
 int numero;
 
     {
     printf("inserisci un numero: ");
     scanf("%d", &numero);
     }
          
     switch (numero){
    int i;       
      case 1 :
//sono rimasto bloccato in questa parte
     printf("primo accesso  effettuato con successo\n");
     while (riga[i]!0){
         if((riga [i]>=97) && (riga [i]<=122)){
         riga[i]=riga[i]+32;
         }
      printf("la stringa è stata convertita\n");
    return 0;
  
          break;
          
      case 2 :
      printf("hai inserito il numero 2\n");
          break;
          
      case 3 :
          printf("hai inserito il numero 3\n"); 
          break;
        
      case 4 :
      printf("4!, processo eseguito");
          break;
      case 5 :
      printf("hai inserito il numero 5\n ");
          break;
        
          case 6:
           printf("Errore");
        
      }
      }
 
Ultima modifica:
Per convertire un carattere da maiuscolo in minuscolo si fa:
C:
char lowercase(char c) { return 'A' <= c && c <= 'Z' ? c - 'A' + 'a' : c; }
prova a scrivere il resto del codice e se hai qualche problema posta qualcosa.

Qui la gente è poco invogliata a fare i compiti a casa degli altri utenti. Sei "bloccata qui" ma non hai postato proprio niente. Ti consiglio di prendere l'abitudine di postare il tuo tentativo di soluzione (parzialmente corretto) almeno capiamo che sei qui per chiedere aiuto e non stai semplicemente cercando il fesso che svolge i compiti al posto tuo. Vedrai che poi anche le risposte arriveranno tempestive ;)
 
  • Mi piace
Reazioni: emina e --- Ra ---
Pubblica il codice che hai scritto tu, anche se errato, così vediamo come hai ragionato per cercare di risolvere il problema. Se ti scriviamo già la soluzione fatta, non impari niente. Ciao ;)
 
  • Mi piace
Reazioni: emina
Ultima modifica:
scusate eccolo, il codice: sono arrivato alla fase dello switch: dovrei convertire il contenuto del file.txt "BENVENUTO UTENTE" in minuscolo; poi su case 2: di nuovo in maiuscolo con la tabelle ascii, ci ho provato non so cosa sbaglio:




C:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int main (){

FILE *filePTR;
 char riga [57];
 
 filePTR= fopen ("file.txt","r");
       if (filePTR==NULL) {
             printf("il file non é stato aperto correttamente");
              return 1;
             }

             while (!feof(filePTR))
            {
         fgets(riga,57,filePTR);
         printf("%s",riga);
                                 }
           
 int numero;
 
     {
     printf("inserisci un numero: ");
     scanf("%d", &numero);
     }
           
     switch (numero){
    int i;        
      case 1 :
     printf("primo accesso  effettuato con successo\n");
     while (riga[i]!0){
         if((riga [i]>=97) && (riga [i]<=122)){
         riga[i]=riga[i]+32;
         }
      printf("la stringa è stata convertita\n");
    return 0;
   
          break;
           
      case 2 :
      printf("hai inserito il numero 2\n");
          break;
           
      case 3 :
          printf("hai inserito il numero 3\n");  
          break;
         
      case 4 :
      printf("4!, processo eseguito");
          break;
      case 5 :
      printf("hai inserito il numero 5\n ");
          break;
         
          case 6:
           printf("Errore");
         
      }
      }
Messaggio unito automaticamente:

Per convertire un carattere da maiuscolo in minuscolo si fa:
C:
char lowercase(char c) { return 'A' <= c && c <= 'Z' ? c - 'A' + 'a' : c; }
prova a scrivere il resto del codice e se hai qualche problema posta qualcosa.

Qui la gente è poco invogliata a fare i compiti a casa degli altri utenti. Sei "bloccata qui" ma non hai postato proprio niente. Ti consiglio di prendere l'abitudine di postare il tuo tentativo di soluzione (parzialmente corretto) almeno capiamo che sei qui per chiedere aiuto e non stai semplicemente cercando il fesso che svolge i compiti al posto tuo. Vedrai che poi anche le risposte arriveranno tempestive ;)
si sono d'accordo con te, avevo messo il codice ieri non mi ero accorto grazie @St3ve
Messaggio unito automaticamente:

Per convertire un carattere da maiuscolo in minuscolo si fa:
C:
char lowercase(char c) { return 'A' <= c && c <= 'Z' ? c - 'A' + 'a' : c; }
prova a scrivere il resto del codice e se hai qualche problema posta qualcosa.

Qui la gente è poco invogliata a fare i compiti a casa degli altri utenti. Sei "bloccata qui" ma non hai postato proprio niente. Ti consiglio di prendere l'abitudine di postare il tuo tentativo di soluzione (parzialmente corretto) almeno capiamo che sei qui per chiedere aiuto e non stai semplicemente cercando il fesso che svolge i compiti al posto tuo. Vedrai che poi anche le risposte arriveranno tempestive ;)
si sono d'accordo con te, avevo messo il codice ieri non mi ero accorto grazie @St3ve, riguardo al codice, come faccio a stampare i il contenuto del file.txt?
Codice:
BENVENUTO UTENTE!
inserisci un numero: 1 //qui ho inserito il numero 1
primo accesso  effettuato con successo
la stringa � stata convertita  //non mi converte il contenuto in maiuscolo all'interno del filet.txt
 
Ultima modifica:
Per svolgere il punto 1 puoi fare in questo modo:
C:
#include <stdio.h>

char lowercase(char c) {
  return 'A' <= c && c <= 'Z' ? c - 'A' + 'a' : c;
}

char* to_lowercase(char* s, size_t n) {
  for (size_t i = 0; i < n; i++) s[i] = lowercase(s[i]);
  return s;
}

int main() {
  // Si scriva un programma in linguaggio C che legga una stringa di lettere da tastiera.
  // La stringa può essere lunga al massimo 56 caratteri.
  char stringa[57]; // 56 caratteri + '\0'
  printf("Inserisci una stringa: ");
  fgets(stringa, 57, stdin);

  // Rendere la stringa tutta minuscola
  printf("In minuscolo: %s", to_lowercase(stringa, 56));
  return 0;
}
Il punto 2 dovresti riuscire a farlo anche da solo perché basta aggiungere una funzione uppercase che è uguale alla funzione lowercase ma con il case invertito (ie., 'A' -> 'a', 'Z' -> 'z', 'a' -> 'A') e aggiungere una funzione to_uppercase. Se al posto di leggere da tastiera vuoi leggere da file puoi tener buono tutto il primo pezzo che hai scritto tu.

Se vuoi fare un menù, puoi fare una cosa del genere:
C:
int scelta;                                
printf("1. converti in minuscolo\n");      
printf("2. converti in maiuscolo\n");      
printf("3. rimuovi i caratteri diversi\n");
printf(">>> ");                            
scanf("%d", &scelta);                      
                                           
switch(scelta) {                           
  case 1:                                  
    // qualcosa                            
    break;                                 
  case 2:                                  
    // qualcosa                            
    break;                                 
  case 3:                                  
    // qualcosa                            
    break;                                 
  default:                                 
    printf("Errore: scelta non valida\n"); 
}
Nota che il messaggio di errore non è su un case (come hai fatto tu) ma è in default: non deve apparire solo quando scelta vale 6, ma deve apparire per qualsiasi valore che non sia gestito da un case.

3: eliminare dalla stringa tutti i caratteri diversi.
Non ho capito cosa vuol dire.
 
Per svolgere il punto 1 puoi fare in questo modo:
C:
#include <stdio.h>

char lowercase(char c) {
  return 'A' <= c && c <= 'Z' ? c - 'A' + 'a' : c;
}

char* to_lowercase(char* s, size_t n) {
  for (size_t i = 0; i < n; i++) s[i] = lowercase(s[i]);
  return s;
}

int main() {
  // Si scriva un programma in linguaggio C che legga una stringa di lettere da tastiera.
  // La stringa può essere lunga al massimo 56 caratteri.
  char stringa[57]; // 56 caratteri + '\0'
  printf("Inserisci una stringa: ");
  fgets(stringa, 57, stdin);

  // Rendere la stringa tutta minuscola
  printf("In minuscolo: %s", to_lowercase(stringa, 56));
  return 0;
}
Il punto 2 dovresti riuscire a farlo anche da solo perché basta aggiungere una funzione uppercase che è uguale alla funzione lowercase ma con il case invertito (ie., 'A' -> 'a', 'Z' -> 'z', 'a' -> 'A') e aggiungere una funzione to_uppercase. Se al posto di leggere da tastiera vuoi leggere da file puoi tener buono tutto il primo pezzo che hai scritto tu.

Se vuoi fare un menù, puoi fare una cosa del genere:
C:
int scelta;                               
printf("1. converti in minuscolo\n");     
printf("2. converti in maiuscolo\n");     
printf("3. rimuovi i caratteri diversi\n");
printf(">>> ");                           
scanf("%d", &scelta);                     
                                          
switch(scelta) {                          
  case 1:                                 
    // qualcosa                           
    break;                                
  case 2:                                 
    // qualcosa                           
    break;                                
  case 3:                                 
    // qualcosa                           
    break;                                
  default:                                
    printf("Errore: scelta non valida\n");
}
Nota che il messaggio di errore non è su un case (come hai fatto tu) ma è in default: non deve apparire solo quando scelta vale 6, ma deve apparire per qualsiasi valore che non sia gestito da un case.


Non ho capito cosa vuol dire.
ho risolto @St3ve ti ringrazio molto