PDA

Visualizza la versione completa : [ C ] Ribaltamento Parole


dwight95
31-10-2014, 20:21
Salve a tutti!! Ho un piccolo problema con il codice scritto sotto.. premetto che č un programma che serve a ribaltare le parole, lasciando le parole nell'ordine normale, ma con le lettere invertite ( la prima con l'ultima ecc.).. quando vado ad eseguire il programma, xcode va in errore, ma non segnala nulla tra le righe del codice. Qualcuno riesce a darmi una mano? Grazie



#include <stdio.h>


int main() {

char words[30]; //dichiaro l'array principale
char convert[30]; //array per copiare
int i = 0; //contatore array principale
int j = 0; //contatore array copiato

printf("Inserisci una frase con parole divise da '.':\n");
scanf("%s", words); //inserisco la frase

while (i < 30) {
while (words[i] != '.') {
convert[j] = words[i]; //passo i caratteri dall'array principale in quello del copiato fino al '.'
++i;
++j;
}

while (j >= 0) {
printf("%c", convert[j]); //scrivo al contrario la parola fino al punto
--j;
}
printf("%c", words[i]); //stampo il punto

++i;//incoremento per passare al carattere dopo il punto
j=0;
}


return 0;
}

oregon
31-10-2014, 20:40
Forse prima di

while (j >= 0) {

manca una

j--;

dwight95
01-11-2014, 09:58
Purtroppo non cambia nulla..

minomic
01-11-2014, 10:20
Cosė funziona:



#include <stdio.h>




int main()
{


char words[30]; //dichiaro l'array principale
char convert[30]; //array per copiare
int i = 0; //contatore array principale
int j = 0; //contatore array copiato


printf("Inserisci una frase con parole divise da '.':\n");
scanf("%s", words); //inserisco la frase


while (words[i] != '\0')
{
while ((words[i] != '.') && words[i] != '\0')
{
convert[j] = words[i]; //passo i caratteri dall'array principale in quello del copiato fino al '.'
++i;
++j;
}
j--;
while (j >= 0)
{
printf("%c", convert[j]); //scrivo al contrario la parola fino al punto
--j;
}
printf("%c", words[i]); //stampo il punto


if(words[i] == '\0') break;


++i;//incremento per passare al carattere dopo il punto
j=0;
}




return 0;
}



Il problema stava nel fatto che l'ultima parola non termina con un punto, ma con il carattere '\0' (terminatore della stringa), e questo nel codice non veniva considerato.

:ciauz:

dwight95
01-11-2014, 11:01
Ah grazie mille!! Non ci avevo pensato!!

oregon
01-11-2014, 13:50
Purtroppo non cambia nulla..

se scrivi una frase con i punti finali come hai detto allora cambia tutto

prova con

essere.o.non.essere.

Loading