RISOLTO esercizio linguaggio c

Stato
Discussione chiusa ad ulteriori risposte.

lucagallo128

Nuovo Utente
14
0
Scrivere un programma che chiede in input una stringa all'utente e conta quante volte le sequenze di caratteri 'do' e 're' occorrono nella stringa inserita. Il programma produce in uscita, il numero di volte che 'do' e 're' occorrono nella stringa data in ingresso e una nuova stringa ottenuta rimuovendo le sequenze 'do' e 're' dalla stringa in ingresso. Strutturare il codice utilizzando il costrutto funzionale.
 

fabio93

Utente Attivo
606
172
CPU
AMD Ryzen 5 2400G
Dissipatore
Arctic Alpine64 Plus
Scheda Madre
Gigabyte GA-AX370-Gaming 3
Hard Disk
Crucial MX500 250 GB, Crucial BX500 240 GB
RAM
G.Skill F4-3200C14D-16GFX FlareX 16 GB
Monitor
HP 2010i
Alimentatore
Corsair TX550M
Case
Sharkoon M25-W
Periferiche
Magicforce 68, Logitech G203
Sistema Operativo
Windows 10 Pro, Fedora 31
  1. Il prototipo della funzione main è int main() nella forma senza argomenti. Il tipo di ritorno è sempre e solo int, non void.
  2. Al termine della funzione main sarebbe opportuno mettere un return 0;
  3. La funzione gets è deprecata, perché non fornisce un controllo per il buffer overflow, vale a dire l'uscita dai "confini" di un vettore. Usa fgets invece. Prende in input tre argomenti: la stringa di destinazione, il numero massimo di caratteri da leggere (compreso il carattere di terminazione) e lo stream di input, nel tuo caso stdin (qui il prototipo).
Premesso questo, nel ciclo ci sono diversi errori:
if((parola[posizione,posizione+1]=="do")||(parola[posizione,posizione+1]=="re"))
c_DO++,c_RE++;
else if(parola[posizione,posizione+1]==' ');
else posizione++;
Non si può indicizzare un vettore (= array monodimensionale) usando due indici, e non puoi riferirti contemporaneamente a due elementi distinti (quelli indicizzati rispettivamente da posizione e da posizione+1).
È sbagliato gestire i due casi ("do" e "re") nello stesso ramo if, dato che così vengono incrementati entrambi i contatori sia che venga letto un "do" che un "re".
Nell'else if dovresti incrementare il contatore degli spazi.
La variabile indice posizione (che, per comodità e convenzione, ti suggerirei di rinominare in i, k o j) la devi incrementare a prescindere, non in un else.

L'esercizio ti chiede di stampare la stringa senza gli eventuali "do" e "re". Per fare questo, ti conviene usare una seconda stringa in cui copiare tutti i caratteri della prima tranne le suddette sillabe.
Fatte le dovute correzioni, puoi cercare di implementare il programma usando le funzioni.
 
Ultima modifica:
  • Mi piace
Reactions: _Achille

rodhellas

Utente Èlite
1,512
425
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
Hard Disk
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
Scheda Video
Gigabyte GTX 960 OC
Scheda Audio
Integrata
Monitor
SyncMaster 223BW
Alimentatore
Antec HCG-520M
Case
Meshify C
Internet
Gigabit Fastweb
Sistema Operativo
Windows 10 64bit
La sezione Programmazione e le sue sottosezioni non offrono un servizio di risoluzione compiti scolastici.
E' possibile chiedere aiuto ma allegando il codice scritto o le prove fatte.
 

Spanci03

Utente Attivo
418
84
Periferiche
usb, mouse,tastiera
Internet
duckduckgo
Sistema Operativo
windows 7 , debian
Devi gestire la stringa come se vosse un vettore, e vedere carattere per carattere se sta do oppure re, e incrementare i contatori e darli in output
 

lucagallo128

Nuovo Utente
14
0
io ho provato cosi ma ovviamente non funziona



Codice:
void main(){
char parola[100];
int posizione=0,lunghezza=0;
int c_DO=0,c_RE=0,spazi=0;


gets(parola);
printf("%s\n",parola);
lunghezza=strlen(parola);
printf("%d\n",lunghezza);



while(posizione<lunghezza){
if((parola[posizione,posizione+1]=="do")||(parola[posizione,posizione+1]=="re"))
c_DO++,c_RE++;
else if(parola[posizione,posizione+1]==' ');
else posizione++;


}
printf("DO: %d\n",c_DO);
printf("RE: %d\n",c_RE);
printf("Gli spazi sono %d\n",spazi);
}
 

Spanci03

Utente Attivo
418
84
Periferiche
usb, mouse,tastiera
Internet
duckduckgo
Sistema Operativo
windows 7 , debian
io ho provato cosi ma ovviamente non funziona



Codice:
void main(){
char parola[100];
int posizione=0,lunghezza=0;
int c_DO=0,c_RE=0,spazi=0;


gets(parola);
printf("%s\n",parola);
lunghezza=strlen(parola);
printf("%d\n",lunghezza);



while(posizione<lunghezza){
if((parola[posizione,posizione+1]=="do")||(parola[posizione,posizione+1]=="re"))
c_DO++,c_RE++;
else if(parola[posizione,posizione+1]==' ');
else posizione++;


}
printf("DO: %d\n",c_DO);
printf("RE: %d\n",c_RE);
printf("Gli spazi sono %d\n",spazi);
}
io qua non vedo la soluzione che ho detto io.....
 

Spanci03

Utente Attivo
418
84
Periferiche
usb, mouse,tastiera
Internet
duckduckgo
Sistema Operativo
windows 7 , debian
@Mursey penso si possa chiudere visto che l'utente entra nel forum senza rispondere :(
Io non capisco quelli che chiedono aiuto e poi spariscono
 
Stato
Discussione chiusa ad ulteriori risposte.

Entra

oppure Accedi utilizzando

Discussioni Simili

Hot del momento