Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Mate X7 rinnova la sfida nel segmento dei pieghevoli premium puntando su un design ancora più sottile e resistente, unito al ritorno dei processori proprietari della serie Kirin. L'assenza dei servizi Google e del 5G pesa ancora sull'esperienza utente, ma il comparto fotografico e la qualità costruttiva cercano di compensare queste mancanze strutturali con soluzioni ingegneristiche di altissimo livello
Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
La facilità di installazione e la completa automazione di tutte le fasi di utilizzo, rendono questo prodotto l'ideale per molti clienti. Ecco com'è andata la nostra prova in anteprima
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 31-03-2011, 17:24   #1
mistergks
Senior Member
 
L'Avatar di mistergks
 
Iscritto dal: Mar 2011
Messaggi: 1050
[C++] Algoritmo: quante lettere ci sono tra queste due??

Ho una di stringa (o un array di char)...che contiene delle lettere...ad esempio: "a t q r s g".
Ora... vorrei creare una funzione che mi dica quante lettere ci sono ad esempio tra 'a' e 'r'.. come faccio?

Io avevo pensato di ordinare alfabeticamente le lettere con un bubble sort magari.. e poi fare delle verifiche con un if.. ma non mi sembra molto buona quest'idea. anche perchè può capitare come nell'esempio che non ci siano tutte le lettere!
mistergks è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2011, 17:48   #2
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Forse non ho capito ma...
Codice:
string <- [a][t][q][r][s][g]
delimiter1 <- [a]
delimiter2 <- [r]

index1 <- string.indexOf(delimiter1) -> 0
index2 <- string.indexOf(delimiter2) -> 3
result <- countElementBetween(index1, index2)

// countElementBetween...
countElementBetween(index1, index2)
    max <- max(index1, index2)
    min  <- min(index1, index2)
    -> max - (min+1)
... l'idea è quella di vedere la stringa come un array di caratteri, quindi trovare gli indici dei due caratteri "delimitatori", a quel punto con una operazione di sottrazione tra l'indice più grande e quello più piccolo trovi il numero di elementi tra i due indici/caratteri.

Questo in linea di massima, bisogna però definire alcuni casi limite, ad esempio cosa dovrebbe succedere in questo caso?
Codice:
string <- [a][b][a][t][v][z]
delimiter1 <- [a]
delimiter2 <- [z]
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 31-03-2011 alle 17:50.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2011, 17:49   #3
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12939
Beh dai è semplice, non hai bisogno di alcun algoritmo di sorting.

Scansioni le lettere nella stringa, quando incontri il primo delimitatore cominci a contare, quando incontri la seconda lettera smetti di farlo e restituisci il risultato.

Ragionevolmente si può fare con un for ed un paio di if.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2011, 18:18   #4
mistergks
Senior Member
 
L'Avatar di mistergks
 
Iscritto dal: Mar 2011
Messaggi: 1050
e quale sarebbe il delimitatore?!
potresti farmi vedere gli if perfavore? se non chiedo troppo
mistergks è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2011, 19:36   #5
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12939
Quote:
Originariamente inviato da mistergks Guarda i messaggi
e quale sarebbe il delimitatore?!
potresti farmi vedere gli if perfavore? se non chiedo troppo
I delimitatori sarebbero le due lettere che passerai alla tua funzione.

Codice:
var begin = 0;
var start = false;
for (..)
{
   if carattere corrente == 'a':
       start = true;
       begin = i;
   else
   if carattere corrente == 'r':
      break;
}

if start and i < length:
   return  i - begin - 1;

return -1;
Se i due caratteri sono completamente assenti la funzione ritorna un numero negativo.

Se viene incontrata 'a' ma mai 'r' la funzione termina con un valore negativo.

Se si incontrano più a viene considerata l'ultima .

Quindi se ho aaabbr viene restituito 2.

Si potrebbe migliorare magari facendo un automa con un contatore.

Ultima modifica di WarDuck : 31-03-2011 alle 19:59.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 01-04-2011, 00:00   #6
mistergks
Senior Member
 
L'Avatar di mistergks
 
Iscritto dal: Mar 2011
Messaggi: 1050
Ho cercato di convertire il tuo pseudocodice in codice c++..mi compila...però appare la console e sparisce subito...all'inizio pensavo per la mancanza del system("pause"); però ho controllato e l'ho messo!...cosa può essere?
Poi un'altra cosa: se io volessi rendere generica la cosa? cioè volessi contare quante lettere ci sono tra la prima lettera dell'array e la lettera che sta nella metà dell'array(cioè dimensione/2)



Codice:
#include <iostream>
using namespace std;

int main()
{
char stringa[7]={"atqrsg"};    
int begin = 0;
bool start = false;
for (int i=0; stringa[i]!='\0'; i++)
{
   if(stringa[i] == 'a'){
       start = true;
       begin = i;}
   else if(stringa[i] == 'r'){
      break;
}


if (start && i < 7)
   return  i - begin - 1;
}
return -1;
 
 
 
system("pause");
return 0;
}
mistergks è offline   Rispondi citando il messaggio o parte di esso
Old 01-04-2011, 01:15   #7
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
Codice:
if (start && i < 7)
   return  i - begin - 1;
}
return -1;
 
 
 
system("pause");
return 0;
è abbastanza ovvio che la chiamata a system non verrà mai eseguita se prima deve essere eseguita una tra "return i - begin - 1" e "return -1"
tuccio` è offline   Rispondi citando il messaggio o parte di esso
Old 01-04-2011, 10:30   #8
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12939
Per rendere generica la cosa devi mettere il codice all'interno di una funzione la cui intestazione sarà:

Codice:
conta_tra(char* str, char begin, char end);
E modificare opportunamente il codice affinché usi come delimitatori begin ed end.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
Sembra ormai certo: la prossima Xbox sar...
“Solutions Beyond Displays”: la strategi...
La società europea The Exploratio...
Dalle auto ai robot umanoidi: Faraday Fu...
Vodafone annuncia la dismissione di un s...
Stiga lancia i nuovi robot tagliaerba co...
Bullismo e cyberbullismo, Keenetic lanci...
Con AI Skills Checker Bitdefender mette ...
E-bike giapponese con 1.000 km di autono...
Un eVTOL con cui basta saper andare in b...
Dal mercato cinese al mondo: HONOR firma...
Sovranità digitale: l'UE sperimen...
Accesso alla memoria su Windows 11 solo ...
iPhone 18 Pro Max con batteria da oltre ...
Windows 11, cali di prestazioni sulle GP...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 05:05.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v