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

    palindroma "C"

    Ciao a tutti

    Avevo bisogno di fare un programma da semplice shell dei comandi in cui l'utente mi digita una parola (che inserisco in un array) controllo se è palindroma e se non lo è devo creare un nuovo array nel quale ricavo una palindroma a partire da quella data.

    Es.
    l'utente inserisce la parola lettera
    Questa non è palindroma.

    Quello che mi serve è una funzione, a cui passare l'array che contiene questa parola, che mi crei e stampi a video:
    letterarettel
    (nb la lettera a non deve essere ripetuta all'inizio dell'inversione)

    il resto l'ho già fatto...

  2. #2
    Utente di HTML.it L'avatar di newbie
    Registrato dal
    Dec 2005
    Messaggi
    299
    Dato ad esempio

    char * buf = "Prova";

    si potrebbe fare così:

    //stringa doppia rispetto all'originaria, ma senza in //carattere centrale
    char * buf2 = malloc(strlen(buf) * 2 - 1);
    //copia la parte iniziale (tutta la stringa, compreso l'ultimo //carattere
    strncpy(buf, buf2, strlen(buf));
    for(int i = 0; i < strlen(buf) - 2; i++)
    buf2[strlen(buf2) - 1 - i] = buf[i];

    Sperando che gli indici funzionino a dovere (in pratica, copia la stringa originaria invertendola in buf2)

    Hope this helps

    newbie

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481

    Re: palindroma "C"

    Originariamente inviato da ViperGTS
    Ciao a tutti

    Avevo bisogno di fare un programma da semplice shell dei comandi in cui l'utente mi digita una parola (che inserisco in un array) controllo se è palindroma e se non lo è devo creare un nuovo array nel quale ricavo una palindroma a partire da quella data.

    Es.
    l'utente inserisce la parola lettera
    Questa non è palindroma.

    Quello che mi serve è una funzione, a cui passare l'array che contiene questa parola, che mi crei e stampi a video:
    letterarettel
    (nb la lettera a non deve essere ripetuta all'inizio dell'inversione)

    il resto l'ho già fatto...
    Se non e' palindroma ok, ma se e' palindroma cosa deve succedere?

  4. #4
    Per vedere se è palindroma o no puoi fare così:

    codice:
    int isPalindroma(char *word)
    {
    	char *temp = malloc(sizeof(word));
    	strcpy(temp, word);
    	temp+=strlen(word)-1;
    	while (*word && *temp)
    	{
    		if (tolower((unsigned char) *(word++))!=tolower((unsigned char) *(temp--)))
    			return 1;
    	}
    	return 0;
    }
    La funzione restituisce 0 se la parola è palindroma, altrimenti 1.



    P.S.: la funzione è anche case-insensitive!
    P.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    117
    codice:
    char *creaparola(char *parola)
    {
      temp = (char *)malloc(strlen(parola) * 2);
      int i, k;
      for (i = 0; parola[i] != '\0'; i++)
        temp[i] = parola[i];
      k = i;
      i -= 2;
      while (i >= 0)
        temp[k++] = parola[i--];
      temp[k] = '\0';
      return temp;
    }

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Allora:
    codice:
    bool IsPalindrome(char *Word)
    {
    	int len = strlen(Word);
    	for(int i = 0; i < len; i++)
    		if(tolower(Word[i])!=tolower(Word[len-i-1])) return false;
    	return true;
    }
    
    char* MakePalindrome(char *Word)
    {
    	int len = strlen(Word);
    	int i, j;
    	for(i = 0; i < len; i++)
    		if(IsPalindrome(Word+i)) break;
    	char *Palindrome = new char[len+i];
    	strcpy(Palindrome, Word);
    	for(j = 0; j < i; j++)
    		Palindrome[len+j] = Word[i-j-1];
    	Palindrome[len+j] = '\0';
    	return Palindrome;
    }
    La seconda funzione si basa sulla prima per ridurre al minimo la lunghezza della palindroma. Per esempio "cicala" invece di diventare "cicalalacic", diventa "cicalacic".

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 © 2025 vBulletin Solutions, Inc. All rights reserved.