Oppure

Loading
19/05/10 14:54
Premoli
ciao!!!

In pratica se tu scrivi ciao, strlen() ti darà come valore 4, ma la prima posizione dei vettori è quella di posto zero, in pratica ci sarà una cosa del genere:

word[0]='c', word[1]='i', word[2]='a', word[3]='o', e in word[4] ci sarà il terminatore di stringa 'ciao!!!

In pratica se tu scrivi ciao, strlen() ti darà come valore 4, ma la prima posizione dei vettori è quella di posto zero, in pratica ci sarà una cosa del genere:

word[0]='c', word[1]='i', word[2]='a', word[3]='o', e in word[4] ci sarà il terminatore di stringa '{parsed_message}' quindi word[4]='{parsed_message}'...

Spero di essermi spiegato, altrimenti chiedi pure...' quindi word[4]='ciao!!!

In pratica se tu scrivi ciao, strlen() ti darà come valore 4, ma la prima posizione dei vettori è quella di posto zero, in pratica ci sarà una cosa del genere:

word[0]='c', word[1]='i', word[2]='a', word[3]='o', e in word[4] ci sarà il terminatore di stringa '{parsed_message}' quindi word[4]='{parsed_message}'...

Spero di essermi spiegato, altrimenti chiedi pure...'...

Spero di essermi spiegato, altrimenti chiedi pure...
aaa
19/05/10 15:28
u_boss
sisi chiarissimo!
grazie per l'intrvento:k:
aaa
19/05/10 15:36
u_boss
Ragazzi ora ho complicato un pò le cose..
praticamente ora devo verificare se le parole immesse sono palindrome.
io ho fatto cosi:
Ricordo che le parole palindrome pe es. possono essere: anna,radar enne etc.
C'èun problema però..nella stampa come primo termine mi stampa qualcosa di strano...
se inserisco
ho un radar in tasca tasca
mi esce(in foto):
il codice è:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxchar 21
#define maxparole 10

int reverse_lett(char word[maxchar]);/*funzione per invertire l'ordine delle lettere nella stringa*/

int main()
{
    enum {SI,NO};
    int i=0,j,ESCI,cont[maxparole];
    ESCI=NO;/*verifica l'uscita dal ciclo*/
    char parole[maxparole][maxchar],temp[maxchar]={'Ragazzi ora ho complicato un pò le cose..

praticamente ora devo verificare se le parole immesse sono palindrome.
io ho fatto cosi:
Ricordo che le parole palindrome pe es. possono essere: anna,radar enne etc.
C'èun problema però..nella stampa come primo termine mi stampa qualcosa di strano...
se inserisco
ho un radar in tasca tasca
mi esce(in foto):
il codice è:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxchar 21
#define maxparole 10

int reverse_lett(char word[maxchar]);/*funzione per invertire l'ordine delle lettere nella stringa*/

int main()
{
    enum {SI,NO};
    int i=0,j,ESCI,cont[maxparole];
    ESCI=NO;/*verifica l'uscita dal ciclo*/
    char parole[maxparole][maxchar],temp[maxchar]={'{parsed_message}'};
    printf("Inserire serie di parole\n");
    while(ESCI==NO)/*ciclo while per riempire il vettore di stringhe*/
    {
        scanf("%s",temp);/*variabile temporanea*/
        if((strcmp(temp,parole[i-1])==0))/*confronto*/
        ESCI=SI;
        else
        {
            strcpy(parole[i],temp);/*copia della stringa nel vettore*/
            i++;
        }
    }
    for(j=i;j>=0;j--)
    /*ciclo per mandare alla funzione tutte le stringhe immesse*/
    {
        cont[j]=reverse_lett(parole[j]);/*funzione che stampa e allo stesso tempo mi dice se una parole è palindroma*/
    }
    for(j=0;j<=i;j++)/*for che verifica se è palindroma*/
    {
        if(cont[j]==128)
        printf("la parola %s e' palindroma\n",parole[j]);
    }
    return EXIT_SUCCESS;
}
/*-----inizio funzione reverse------*/
int reverse_lett(char word[maxchar])
{
    char palin[maxchar];/*nuova stringa*/
    int k,lung=strlen(word);
    int x=lung-1,compar;
    char temp;
    strcpy(palin,word);
    for(k=0;k<(lung/2);k++)
    {
        temp=palin[k];
        palin[k]=palin[x];
        palin[x]=temp;
        x--;
    }

    /*ora la stringa è rovesciata*/
    printf("%s\n",palin);/*stampa*/
    compar=strcmp(palin,word);
    if(compar==0)/*verifico se la stringa è palindroma confrontando l'originale con l'inversa*/
    return compar+128;/*se è palindroma nel main avrò 128*/
    else
    return EXIT_SUCCESS;/*altrimenti esco normalmente*/
}
'}; printf("Inserire serie di parole\n"); while(ESCI==NO)/*ciclo while per riempire il vettore di stringhe*/ { scanf("%s",temp);/*variabile temporanea*/ if((strcmp(temp,parole[i-1])==0))/*confronto*/ ESCI=SI; else { strcpy(parole[i],temp);/*copia della stringa nel vettore*/ i++; } } for(j=i;j>=0;j--) /*ciclo per mandare alla funzione tutte le stringhe immesse*/ { cont[j]=reverse_lett(parole[j]);/*funzione che stampa e allo stesso tempo mi dice se una parole è palindroma*/ } for(j=0;j<=i;j++)/*for che verifica se è palindroma*/ { if(cont[j]==128) printf("la parola %s e' palindroma\n",parole[j]); } return EXIT_SUCCESS; } /*-----inizio funzione reverse------*/ int reverse_lett(char word[maxchar]) { char palin[maxchar];/*nuova stringa*/ int k,lung=strlen(word); int x=lung-1,compar; char temp; strcpy(palin,word); for(k=0;k<(lung/2);k++) { temp=palin[k]; palin[k]=palin[x]; palin[x]=temp; x--; } /*ora la stringa è rovesciata*/ printf("%s\n",palin);/*stampa*/ compar=strcmp(palin,word); if(compar==0)/*verifico se la stringa è palindroma confrontando l'originale con l'inversa*/ return compar+128;/*se è palindroma nel main avrò 128*/ else return EXIT_SUCCESS;/*altrimenti esco normalmente*/ }
aaa
19/05/10 15:52
Premoli
hai di nuovo sbagliato nei cicli for del main(), sono concettualmente gli stessi errori che hai fatto prima, poi perché fai ritornare 128? cioè perché fai return compar+128?
aaa
19/05/10 15:55
u_boss
perchè se metto solamente return compar (che è uguale a zero) mi conta come palindromi tutti i valori e non ho capito perchè.
comunque potresti segnalarmi gli errori che faccio e spiegarmi perchè come ho fatto non funge correttamente?
aaa
19/05/10 15:59
u_boss
ok ho capito gli errori.
In pratica il ciclo for aumenta i di 1.Ma l'aumenta anche nel caso la parola è uguale, allora nel ciclo per stampare devo partire da i-1!
ma per il discorso dei problemi col return compar che mi sai dire?
lì non trovo nessuna spiegazione!
aaa
19/05/10 16:02
u_boss
--------RISOLTO-------------
Perchè in pratica EXIT_SUCCESS equivale ad 0!
aaa
19/05/10 16:03
Premoli
for(j=i;j>=0;j--) //sostituiscilo con for(j=0; j<i; j++) 
    
for(j=0;j<=i;j++) //al posto di <= ci devi mettere <


Per l'if puoi fare semplicemente così:

if(compar==0)
    return 1;
aaa