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

    [C++]Catturare interi da una stringa

    Ciao, qualcuno saprebbe semplificarmi questo problema?
    In pratica ho una stringa così composta:

    1 ; 12 34 ; 1 53 ; 6

    Devo prelevare solo i numeri ed inserirli in un vector<int>

    Se scorro la stringa come un array di caratteri me li vede singolarmente staccati
    tipo 1, ,;, ,1,2, ,3,4, ,;, ,1, ,5,3, ,;, ,6 e non

    1 ; 12 34 ;

    Qualcuno saprebbe estrarli senza separare le unità dalla decine ed inserirli in modo corretto nel vector?

    Grazie.
    Gli uomini imparano ad essere ben pensanti prima ancora di imparare a pensare (Albert Ellis)

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Usa la funzione strtok in un ciclo per separare le varie parti e poi la atoi per ogni parte
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Ciao sono riuscito a levare i punti e virgola adesso ho una stringa composta solo da numeri (una o due cifre) e spazi.
    1 34 5 67 3 45 4 7
    Non riesco a catturarli per metterli in un vector.

    Mi potresti fare un esempio?

    Ho scritto questo:

    codice:
    int k = 0;
        char ch;
        for(int i = 0; i < str1.length(); i++)
        {        
            if( str1[ i ] == ' '){
                for(int j = k; j < i; j++)
                {
                    ch = str1[ j ];
                    strF += ch;
                    
                    val = atoi(strF.c_str()); 
                    v.push_back(val);
                    
                }cout<< strF << "#";
                strF="";
                k = i + 1;
            }    
        }
            
        vector<int>::iterator p;
        for(p = v.begin(); p != v.end(); p++)
        {
            cout<< *p << " ";
        }
    ci sono quasi se non che, dei numeri a due cifre mi stampa prima la decina e poi il numero completo di decina e unità.

    Immagine.png
    Ultima modifica di Riccardo88; 25-02-2016 a 18:20
    Gli uomini imparano ad essere ben pensanti prima ancora di imparare a pensare (Albert Ellis)

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non hai neanche preso in considerazione il mio suggerimento sulla funzione strtok ...

    Leggi la documentazione

    http://www.cplusplus.com/reference/cstring/strtok/
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Non hai neanche preso in considerazione il mio suggerimento sulla funzione strtok ...

    Leggi la documentazione

    http://www.cplusplus.com/reference/cstring/strtok/
    Sì ma senza neanche uno straccio di esempio non era molto chiaro quello che intendessi.
    Gli uomini imparano ad essere ben pensanti prima ancora di imparare a pensare (Albert Ellis)

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Gli esempi li trovi, a centinaia, se cerchi la funzione che ti ho suggerito.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Infatti ne ho trovati, ma volevo qualcosa inerente al mio problema altrimenti non postavo proprio.
    Comunque, grazie ugualmente.
    Gli uomini imparano ad essere ben pensanti prima ancora di imparare a pensare (Albert Ellis)

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Se solo ne adottassi uno di quegli esempi, mostrandolo qui e facendo la tua parte, senza aspettarti tutto il codice pronto, si potrebbero fornire eventuali correzioni e integrazioni. Del resto, rispetto al ciclo con la strtok, che trovi ovunque, basta una atoi all'interno dello stesso ciclo.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Guarda che "la mia parte" era impressa qualche post sopra, chiedevo solo di mostrarmi che idea avessi avuto tu, adattata al mio problema (ovviamente), con esempio, niente di troppo insomma.

    Comunque ho risolto diversamente, ancora grazie.
    Si può anche chiudere il post.
    Gli uomini imparano ad essere ben pensanti prima ancora di imparare a pensare (Albert Ellis)

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Lasciamo perdere ... se usi il C++ potresti anche scrivere diversamente (ecco tutto l'esempio, almeno le parti importanti ...)

    codice:
    #include <sstream>
    
    
    ...
    
    
    	istringstream iss(str1);
    	string tok;
    	int value;
    	while (getline(iss, tok, ' '))
    	{
    		istringstream(tok) >> value;
    
    
    		cout << value << endl;
    	}
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.