Codice: Seleziona tutto
/*
Scrivere un programma in linguaggio C che legga una frase introdotta da tastiera. La
frase è terminata dall’introduzione del carattere di invio. La frase contiene sia caratteri
maiuscoli che caratteri minuscoli, e complessivamente al più 100 caratteri. Il programma
deve svolgere le seguenti operazioni:
• visualizzare la frase inserita;
• costruire una nuova frase tale che ogni lettera vocale presente nella frase di partenza
sia seguita dalla lettera ’f’ (se la vocale è minuscola) o dalla lettera ’F’ (se la vocale è
maiuscola) nella nuova frase. Il programma deve memorizzare la nuova frase in una
opportuna variabile.
• visualizzare la nuova frase.
Ad esempio, la frase VacAnze di NaTAle diviene VafcAFnzef dif NafTAFlef.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
int main()
{
char s[N+1], smod[2*N+1];
int i, j, lung;
printf("Frase: ");
gets(s);
printf("\n\nLa frase inserita è la seguente:\n%s", s);
lung=strlen(s);
for (i=0; i<strlen(s); i++)
{
if (s[i]=='a' || s[i]=='e' || s[i]=='i' || s[i]=='o' || s[i]=='u' || s[i]=='y'
|| s[i]=='A' || s[i]=='E' || s[i]=='I' || s[i]=='O' || s[i]=='U' || s[i]=='Y')
{
lung++;
}
}
for (i=0, j=0; i<strlen(s) && j<lung; (i++), j++)
{
if (s[i]=='a' || s[i]=='e' || s[i]=='i' || s[i]=='o' || s[i]=='u' || s[i]=='y')
{
smod[j]=s[i];
smod[j+1]='f';
j++;
}
else
{
if (s[i]=='A' || s[i]=='E' || s[i]=='I' || s[i]=='O' || s[i]=='U' || s[i]=='Y')
{
smod[j]=s[i];
smod[j+1]='F';
j++;
}
else
{
smod[j]=s[i];
}
}
}
printf("\n\nNuova frase:\n%s\n\n", smod);
return 0;
}
Questo output però con frasi più o meno della stessa dimensione non capita...
Maggiori informazioni al riguardo? Soluzioni? Se non ricordo male per i char semplici c'era la combinazione %c%*c per non "prendere in considerazione l'invio (o qualcosa del genere).
Attendo spiegazioni.
EDIT:
Effettivamente non avevo inserito il terminatore di stringa. Ho ottimizzato il programma e va alla perfezione.
Codice: Seleziona tutto
/*
Scrivere un programma in linguaggio C che legga una frase introdotta da tastiera. La
frase è terminata dall’introduzione del carattere di invio. La frase contiene sia caratteri
maiuscoli che caratteri minuscoli, e complessivamente al più 100 caratteri. Il programma
deve svolgere le seguenti operazioni:
• visualizzare la frase inserita;
• costruire una nuova frase tale che ogni lettera vocale presente nella frase di partenza
sia seguita dalla lettera ’f’ (se la vocale è minuscola) o dalla lettera ’F’ (se la vocale è
maiuscola) nella nuova frase. Il programma deve memorizzare la nuova frase in una
opportuna variabile.
• visualizzare la nuova frase.
Ad esempio, la frase VacAnze di NaTAle diviene VafcAFnzef dif NafTAFlef.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
int main()
{
char s[N+1], smod[2*N+1];
int i, j;
printf("Frase: ");
gets(s);
printf("\n\nLa frase inserita è la seguente:\n%s", s);
for (i=0, j=0; i<strlen(s); i++)
{
smod[j]=s[i];
j++;
if (s[i]=='a' || s[i]=='e' || s[i]=='i' || s[i]=='o' || s[i]=='u' || s[i]=='y')
{
smod[j]='f';
j++;
}
else
{
if (s[i]=='A' || s[i]=='E' || s[i]=='I' || s[i]=='O' || s[i]=='U' || s[i]=='Y')
{
smod[j]='F';
j++;
}
}
}
smod[j]='\0';
printf("\n\nNuova frase:\n%s\n\n", smod);
return 0;
}
