Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    2,460

    [c] stringhe: eliminazione caratteri multipli

    Mettiamo che io ho un testo di questo tipo:
    char *stringa = "ciaaao come stttai?";

    Dovrei scrivere una funzione che mi elimini i caratteri multipli e ritorni "ciao come stai?" ma non ho molte idee

    qualcuno mi può aiutare ?

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2005
    Messaggi
    231

    preciszione

    ma devi gestire anche il caso in cui ci siano parole con consonanti doppie? oppure basta che elimini qualsiasi lettera ripetuta?

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    2,460
    Qualsiasi lettera ripetuta

  4. #4
    Beh a livello algoritmico io utlizzerei 2 puntatori per scrollare la tua stringa di origine.
    Il primo puntatore punta inizialmente al primo char e il secondo (p2) a p1 + 1
    A questo punto verifico che *p1 == *p2
    Se VERO incremento p1 e successivamente p2 = p1 + 1
    Se FALSO scrivo il char puntato da p1 nella nuova stringa e incremento p1
    Tutto si ripete sino a che non incontri il '\0'

    Non ti scrivo il codice perchè sono un pò arrugginito con il C però il ragionamento dovrebbe funzionare

  5. #5
    /**
    questo è il main
    provalo e dimmi se funziona
    dovrebbe essere giusto, se non lo è fammi sapere gli dedico un po + di tempo
    + o meno è quello che ha detto mattneri in codice
    */
    main(){
    int i=0;
    char stringa[]="ciiiiaaaooo commme ssttaai???";
    char *a,*b;
    a=stringa;
    b=stringa+1;
    do{
    if(*a==*b)
    compatta(a);
    else{
    a++;
    b++;
    }
    }while(b<striga+strlen(stringa));
    }
    /**
    questa è una funzione che richiamo,serve solo epr compattare il vettore stringa fa uno shift verso sinistra di una posizione nel nostro caso
    perchè se non mi ricordo male, in ogni caso stringa è un puntatore costante, non può cambiare valore a meno chè, se non vuoi cose più semplici puoi allocare con malloc e liberare con free
    */
    compatta(const char *v){
    int i=0;
    while(strlen(v)-1>i){
    *(v+i)=*(v+i+1);
    i++;
    //v[i]=v[i+1];
    }
    }

  6. #6
    Una soluzione alternativa : (no case-sensitive)
    codice:
    #include <iostream>
    using namespace std;
    int main()
    {
    	char *str = "Ccciiiaaaoo   cooomMmmme ssstTtaaAiIi ????";
    	unsigned int i=0;
    	for(unsigned int t=1; t<=strlen(str); t++)
    		if( tolower(str[i]) != tolower(str[t]) ) str[++i] = str[t];
    	cout << str << endl << endl;
    	system("PAUSE");
    	return 0;
    }
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

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.