Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [c++]conjtrollo stringa palindroma

    ciao.
    devo fare iun controllo per verificare se una stringa inserita è palindroma(ovvero può essere letta indifferentemente da sinistra verso destra e viceversa: es. "oro")

    quindi una volta memorizzato l'array stringa[10] con cin, ho pensato di calcolare la lunghezza della stringa tramite strlen(), così se ad esempio la stringa è di 5 caratteri, verifico se il 1° è uguale al 5° e il 2° è uguale al 4°.
    Ma non ne sono molto capace. cioè con strlen mettiamo mi esce lunghezza 5. ora come faccio in base alla lunghezza a verificare il primo carattere con l'ultimo e il secondo con il penultimo?
    se potete aiutarmi vi ringrazio moltissimo

    p.s. se poi avete una soluzione più semplice per verificare la stringa palindroma fatemi sapè
    http://codecanyon.net/category/all?ref=Manuelandro
    And I bet she told a million people that she'd stay in touch, Well all the little promises they dont mean much,When theres
    memories to be made

  2. #2
    Detta L la lunghezza della stringa s calcolata con la funzione strlen() e detto i l'indice che scandisce la stessa , allora per confrontare due caratteri della stringa si ha:
    codice:
    i=0
    flag=TRUE /* flag di condizione */
    do
    {
     if (s[i]==s[L-i-1]) 
      flag=FALSE;
     i++;
    }
    while ((i<L/2)&&(flag));

  3. #3
    così come hai detto tu

    condizione=true;
    for (i=0; i<(lunghezza totale-1)/2; i++
    if (parola[i]!=parola[lunghezza totale-1-i])
    condizione=false;

    if condizione=true
    // palindroma
    else
    // non palindroma


    ciao

  4. #4
    Originariamente inviato da gygabyte017
    così come hai detto tu

    condizione=true;
    for (i=0; i<(lunghezza totale-1)/2; i++
    if (parola[i]!=parola[lunghezza totale-1-i])
    condizione=false;

    if condizione=true
    // palindroma
    else
    // non palindroma


    ciao
    me lo puoi spiegare perfavore?

    nn riesco a capire quel lunghezza_totale-1)/2 e la condizione sotto!
    http://codecanyon.net/category/all?ref=Manuelandro
    And I bet she told a million people that she'd stay in touch, Well all the little promises they dont mean much,When theres
    memories to be made

  5. #5
    praticamente facciamo un esempio:

    la parola è "aboba" x esempio.
    avrai che la lunghezza L è 5
    e con un ciclo x scandirla avrai

    for (i=0; i<(int)L/2 i++)

    dirai che significa (int)L/2 ???
    significa che faccio il controllo silla PRIMA META' della parola, che confronto con la SECONDA META'. Quindi da 0 a (int)L/2 ci sarà la prima metà.
    In una parola di 5 lettere, andrà da 0 a 2(escluso) perchè

    (int)5/2 = (int)2.5 = 2

    In una parola di 8 lettere, andrà da 0 a 4(escluso) perchè

    (int)8/2 = (int)4 = 4

    Quindi avendo la prima metà confronti ogni carattere I con il carattere L-I-1 (meno uno perchè le stringhe in c++ vanno da 0 a len-1)
    quindi confronterai:
    0 con 4
    1 con 3

    fine

    In una parola di 8 lettere confronterai:
    0 con 7
    1 con 6
    2 con 5
    3 con 4

    quindi poni una variabile flag che all'inizio vale true (è palindroma) e se nel ciclo non viene verificata una uguaglianza, diventa false.

    codice:
    int L = strlen(parola);
    bool FLAG=true;
    
    for (i=0; i<(int)L/2; i++)
      if (parola[i] != parola[L-i-1)
        FLAG = false;
    
    if FLAG
      //palindroma
    else
      //non palindroma

    Spero di essermi spiegato....


    P.S ho modificato un pò il codice che tu ho dato che così è meglio...

  6. #6
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    quasi giusto
    funziona solo con parole di lunghezza dispari
    codice:
    int condizione = 1, i;
    for (i=0; i<lunghezza_parola/2; i++)
      if (parola[i] != parola[lunghezza_parola-1-i])
        condizione = 0;
    confronta il char 0 e 9, 1 e 8, 2 e 7...

  7. #7

  8. #8
    Mi scuso con quanti hanno letto il mio post . In effetti il test
    codice:
     if (s[i]==s[L-i-1])
    è errato e va sostituito con
    codice:
     if (s[i]!=s[L-i-1])

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.