RISOLTO Ricercare due lettere in una Stringa

Stato
Discussione chiusa ad ulteriori risposte.

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Non sto facendo nessuna polemica io.
Sei te che mi hai dato del gradasso ;)
C'è size - 1 perchè metti caso che l'ultima lettera della stringa è "n" (quindi abbiamo abcdn) allora poi andrà a controlla i + 1 (cioè 5+1), ma nella posizione 6 non c'è nulla.
Ti basta mettere quella condizione solo nel while
 

r3dl4nce

Utente Èlite
16,951
9,255
In tal caso si prende la lunghezza della stringa da ricercare e si scorre fino alla lunghezza della stringa in cui cercare meno la lunghezza della stringa da cercare.
Generalmente prima di scrivere del codice è bene pensare all'algoritmo da implementare e come può essere migliorato / ottimizzato
 
  • Mi piace
Reazioni: rctimelines

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
In tal caso si prende la lunghezza della stringa da ricercare e si scorre fino alla lunghezza della stringa in cui cercare meno la lunghezza della stringa da cercare.
Generalmente prima di scrivere del codice è bene pensare all'algoritmo da implementare e come può essere migliorato / ottimizzato
Cosa che comunque ibernato ha fatto (almeno nell'ultima versione del codice che ha scritto e involontariamente immagino)
 

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit

rctimelines

Utente Èlite
5,143
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
Infatti, non avresti dovuto scrivere del codice nel linguaggio, ma descrivere l'algoritmo e al limite mettere giù del pseudocodice.

Inviato dal mio Nexus 6P utilizzando Tapatalk
 
  • Mi piace
Reazioni: Mursey

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Quello è per evitare il segfault, per seguire il consiglio di @r3dl4nce (e che ho dato inutilmente anche io in precedenza) bisogna invece mettere la condizione i<size-1 nel while.
Semo d'accordo, scritto anche io prima :ok:
 

rctimelines

Utente Èlite
5,143
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
Ma dentro l'if ha messo i < size-1 :)
Non è la stessa cosa, quella condizione serve a scansionare il vettore fino al penultimo carattere. dentro a if non ha senso, anche perché sempre verificata.

Scusate, ma qui si tratta di logica elementare, non di programmazione!

Inviato dal mio Nexus 6P utilizzando Tapatalk
 
  • Mi piace
Reazioni: r3dl4nce

Ibernato

Utente Èlite
4,330
2,047
OS
Windows 10 Pro / Ubuntu 22.04
Non è la stessa cosa, quella condizione serve a scansionare il vettore fino al penultimo carattere. dentro a if non ha senso, anche perché sempre verificata.

Scusate, ma qui si tratta di logica elementare, non di programmazione!

Inviato dal mio Nexus 6P utilizzando Tapatalk
E' verificata, ma senza quel controllo (size -1) arrivi all'ultimo carattere e poi lo stesso controlli i+1 ma non ci sarà nessun carattere.
Anche senza la size -1 funziona ma comunque vai a controllare zone di memorie che non sai cosa c'è dentro.
 

rctimelines

Utente Èlite
5,143
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
E' verificata, ma senza quel controllo (size -1) arrivi all'ultimo carattere e poi lo stesso controlli i+1 ma non ci sarà nessun carattere.
Anche senza la size -1 funziona ma comunque vai a controllare zone di memorie che non sai cosa c'è dentro.
Sei ore che te lo dico e ora sei tu che me lo vorresti spiegare? Non è che cerca in aree di memoria che non sai cosa c'è dentro, sei fuori dallo stack.. é un errore di overflow. Sbagliato.

Inviato dal mio Nexus 6P utilizzando Tapatalk
 
  • Mi piace
Reazioni: r3dl4nce

Ibernato

Utente Èlite
4,330
2,047
OS
Windows 10 Pro / Ubuntu 22.04
Sei ore che te lo dico e ora sei tu che me lo vorresti spiegare? Non è che cerca in aree di memoria che non sai cosa c'è dentro, sei fuori dallo stack.. é un errore di overflow. Sbagliato.

Inviato dal mio Nexus 6P utilizzando Tapatalk
Tu hai solo fatto polemica senza scrivere una soluzione :)
Basta così per me per uno stupido programma.
 

rctimelines

Utente Èlite
5,143
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
Tu hai solo fatto polemica senza scrivere una soluzione :)
Basta così per me per uno stupido programma.
Cosa stai dicendo? Tu hai dato una soluzione "sbagliata" ed è dalle 6 di questa mattina che ti ripeto dove sono gli errori!!! Siamo al paradosso!
Sono 35 anni che programmi e mi ritrovo a sentirmi dare lezioni si come trovare un byte in una stringa, da parte di uno che non sa nemmeno cosa sono!!! Ahahah

Inviato dal mio Nexus 6P utilizzando Tapatalk
 

Ibernato

Utente Èlite
4,330
2,047
OS
Windows 10 Pro / Ubuntu 22.04
Cosa stai dicendo? Tu hai dato una soluzione "sbagliata" ed è dalle 6 di questa mattina che ti ripeto dove sono gli errori!!! Siamo al paradosso!
Sono 35 anni che programmi e mi ritrovo a sentirmi dare lezioni si come trovare un byte in una stringa, da parte di uno che non sa nemmeno cosa sono!!! Ahahah

Inviato dal mio Nexus 6P utilizzando Tapatalk
Veramente tu dicevi che il controllo dentro l'if era inutile (cos non vera) e che stampava sempre "NO" anche se stampava "OK" (cosa non vera).
L'unico errore era i < size (scrivendo di fretta il codice) nell'if che ho corretto con size -1 (stop).

Basta così comunque :)
Next time correggi la soluzione così si evitano queste polemiche.

Puoi programmare anche da 100 anni, non vuol dire niente.
Se fai polemiche senza postare una tua soluzione che reputi corrette, fai chiacchiere inutili.
 
Ultima modifica:

rctimelines

Utente Èlite
5,143
2,023
CPU
Ryzen 7 2700X | i7-6700k@4.5 | i5-4460... altri
Dissipatore
wraith MAX | Scythe Katana2|Arctic Freezer 11LP
Scheda Madre
Asrock B450 Fatal1ty 4K | Asus Prime Z270P | Acer Veriton
HDD
Samsung 970evo m.2 | vari | Samsung 860 evo
RAM
16GB G.Skill TridentZ 3000 | 16GB CORSAIR 2133 | 8GB DDR3 1600
GPU
RadeonPro WX3100 4G | ZOTAC GTX 1070 8G | Quadro k620 2G
Monitor
DELL 2419P 2K + Benq 17" | LG Ultrawide 27''
Net
fibra 1000
OS
Windows10-pro64/OpenSUSE-QL15.1/Debian 10.3
Ripeto e confermo che la condizione nell'if non serve e che il contatore doveva terminare a 98.. cioè, precisamente, a "iIl fatto che non mi fissi accorto del return dentro la condizione è semplicemente perché è un modo di programmare un algoritmo che non rientra minimamente nel mio modo di pensare. Uscire da un programma in quel modo è assolutamente deprecabile perché fonte di errore, evidentemente sei un autodidatta o comunque spero che non lavori come programmatore perché un modo simile lo userei al massimo per una patch provvisoria da fare sparire rapidamente

Inviato dal mio Nexus 6P utilizzando Tapatalk
 
  • Mi piace
Reazioni: BAT
Stato
Discussione chiusa ad ulteriori risposte.

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili