Newsgroup: it.comp.lang.c++
Titolo: Ritrovare stringa in altra stringa

Scusate il subject poco chiaro, ma questo problema mi assilla da un poco. Io
ho due stringhe e voglio vedere se in una c'č l'altra. Piů precisamente:
io ho una espressione in una stringa, diciamo:
1+1+1+cos90
ed ho un'altra stringa con valore:
sin
e voglio vedere se nella prima č inserita la seconda. In questo caso no.
Come fareste voi?
Io ho usato un metodo che non credo sia il massimo. Ho fatto un ciclo che
confronta tutti i caratteri della prima stringa con il primo della seconda.
Se uno corrisponde provo il successivo della prima con il successivo della
seconda e cosě via. Fino a determinare se corrispondono. C'č un metodo piů
intelligente e piů veloce?
Grazie mille a tutti.
Luca Carlon

 [...]
Presumo stiamo parlando di oggetti string. Non mi sembra ci sia una funzione 
di libreria sulle string che lo faccia, però bisognerebbe controllare prima 
di tutto (non ho sottomano tutto il mio scibile 8-).
Una soluzione rapida è quella di passare ai char* del C e usare la libreria 
standard del C:
char* pos = strstr(B.c_str(),A.c_str());
In cui A è la string da cercare nella string B. Se la variabile pos vale 
NULL allora A non è una sottosttringa di B.
-- 
"Any sufficiently advanced technology is indistinguishable from magic."
                                                            Arthur C. Clarke

 Come fareste voi?
 basic_string::find
  size_type find(const value_type *ptr, size_type off =3D 0) const;
  size_type find(const value_type *ptr, size_type off,=20
    size_type count) const;
  size_type find(const basic_string& right, size_type off =3D 0) const;
MM

 ha scritto nel messaggio
news:dXuaa.189230$YG2.5...@twister1.libero.it...

il tuo č un classico caso di stringmatching (non č una malattia,
tranquillo!:-))
č un "caso" abbastanza studiato nell'ambito della programmazione, cerca su
internet o su qualche libro.
cmq la tua soluzione mi abbastanza lineare
ivan

 Come fareste voi?
Eccoti un esempio funzionante:
#include <iostream>
#include <string>
#include <algorithm>
int main()
{
    std::string a( "Peppino e' un mio amico" );
    std::string b( "pino" );
    std::string c( "peppe" );
    if ( a.find( b ) != std::string::npos )
        std::cout << b << " e' una sottostringa di " << a << '\n';
    else
        std::cout << b << " non e' una sottostringa di " << a << '\n';
    if ( a.find( c ) != std::string::npos )
        std::cout << c << " e' una sottostringa di " << a << '\n';
    else
        std::cout << c << " non e' una sottostringa di " << a << '\n';
    return 0;
}
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg

 EMG
Ringrazio te e tutti gli altri per le risposte. Me le guarderò con
attenzione e le studierò nel mio caso. Grazie ancora.
Luca Carlon

 ivan
Cioè ti pare che la mia soluzione tutto sommato non sia male? Come velocità
di esecuzione potrebbe andare quindi? O mi conviene decisamente provare
altre soluzioni magari come quelle che mi hanno suggerito?
Grazie ancora anche a te.
Luca Carlon

                                                             Arthur C.
Clarke
Mi piace questa.
Grazie.
Luca Carlon