[RISOLTO] Problema con le stringhe

di il
10 risposte

[RISOLTO] Problema con le stringhe

Non riesco a capire perchè non mi funziona questa funzione:

void Processore::DividiFrasi(){
	int helper = 0;
	for(unsigned int i=0; i<input.size(); i++){
		if(input[i]=='.' || input[i]=='?' || input[i]==';' || input[i]=='!' || input[i]==',') {
			indici.push_back(i+1);
		}
	}
	for(unsigned int i=0; i<=indici.size(); i++){
		frasi.push_back(input.substr(helper, indici[i] - helper));
		helper = indici[i];
	}
	if(DEBUG) StampaFrasi();
	for(unsigned int i=0; i<=frasi.size(); i++) replace(input,frasi[i], "");
	if(input.size() > 0) frasi.push_back(input); // PERCHÈ SE NON FINISCE CON LA PUNTEGGIATURA TRALASCIA LA PARTE FINALE DELLA FRASE
	if(DEBUG) StampaFrasi();
}
Dovrebbe dividere una stringa (string input) in più frasi quando incontra ".",",",";","?","!", e salvare le varie frasi in un vettore (vector<string> frasi)

10 Risposte

  • Re: [RISOLTO] Problema con le stringhe

    Ho modificato così ma continuo ad avere problemi con le stringhe che non finiscono con punteggiatura:
    
    int helper = 0;
    	for(unsigned int i=0; i<input.size(); i++){
    		if(input[i]=='.' || input[i]=='?' || input[i]==';' || input[i]=='!' || input[i]==',') {
    			//indici.push_back(i+1);
    			frasi.push_back(input.substr(helper+1, i-helper+1));
    			helper = i;
    		}
    	}
    	cout <<helper <<endl;
    	if(helper != (input.size()-1)) frasi.push_back(input.substr(helper, input.size()));
    
  • Re: [RISOLTO] Problema con le stringhe

    Tokenizer che funziona
    std::vector<std::wstring>	CTools::Tokenize(const std::wstring& str,const std::wstring& delimiters)
    {
    	std::wstring client = str;
    	std::vector<std::wstring> result;
    
    	while (!client.empty())
    	{
    		std::wstring::size_type dPos = client.find( delimiters );
    		if (dPos == 0) 
    		{ 
    			client = client.substr(delimiters.length()); // remove header delimiter
    			result.push_back(_T(""));
    		} 
    		else
    		{ // head is a real node
    			dPos = client.find( delimiters );
    			std::wstring element = client.substr(0, dPos);
    			result.push_back(element);
    			if (dPos == std::wstring::npos) 
    			{ // node is last element, no more delimiter
    				return result;
    			} 
    			else
    			{
    				client = client.substr(dPos+delimiters.length());
    			}
    		}
    	}
    	if (client.empty()) 
    	{ // last element is delimeter
    		result.push_back(_T(""));
    	}
    	return result;
    }
    
    Scusa ma non ho testa adesso a compilare il tuo codice ma so che questo funziona. Nella stringa delimiters puoi mettere tutti i segni di punteggiatura che vuoi.
    Presa da qui cmq
    http://stackoverflow.com/questions/236129/splitting-a-string-in-c
  • Re: [RISOLTO] Problema con le stringhe

    Grazie, ma non ho capito da dove viene la funzione _T("")
  • Re: [RISOLTO] Problema con le stringhe

    Non è una funzione ma una macro che consente di utilizzare le stringhe MCBS o UNICODE senza modificare il codice.
  • Re: [RISOLTO] Problema con le stringhe

    Ho risolto in un'altro modo. Analizza la stringa e quando incontra uno dei delimitatori ci mette un & dopo, in seguito divido la frase usando istringstream e infine rimuovo il simbolo
  • Re: [RISOLTO] Problema con le stringhe

    Mi sembra una soluzione contorta e poco efficiente ...
  • Re: [RISOLTO] Problema con le stringhe

    Per ora uso questa perchè funziona, cmq la macro _T dove viene dichiarata? perchè il mio compilatore non la riconosce
  • Re: [RISOLTO] Problema con le stringhe

    Sapevo che avresti detto che "funziona", ma resta una soluzione poco efficiente ... non so se è un esercizio, se è così ti verrà fatto notare. Ma se sei soddisfatto ...

    Per la _T dovrebbe bastare la tchar.h o windows.h

    Ma potresti anche ometterla se sai con quale tipo di set di caratteri compilerai.
  • Re: [RISOLTO] Problema con le stringhe

    No, non è un esercizio, io programmo solo per hobby ed è un progetto a cui sto lavorando
    Sto lavorando sotto linux quindi credo che windows.h non ci sia, correggimi se sbaglio.
    Quindi mi basta tchar.h?
    grazie
  • Re: [RISOLTO] Problema con le stringhe

    Non usare proprio _T ... usa le normali string
Devi accedere o registrarti per scrivere nel forum
10 risposte