-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathresearchString.cs
More file actions
154 lines (126 loc) · 5.57 KB
/
researchString.cs
File metadata and controls
154 lines (126 loc) · 5.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
//all comment and variables name are in Italian
/*
questo è un programma (in C#) che una volta scritta una parola (scritta dall' utente),
cerca parole o stringhe simili all' interno di un array (le parole all'interno di questo
array Ricerca possono essere cambiate a riga: 94).
la ricerca viene fatta con un Puntegio che (può essereregolato), quando i caratteri e
il loro quantitativo all' interno della parola vengono confrontati il programma valuta un
puntegio di somiglianza.
Se 2 parole sono simili al 75% allera il la parola nell' array verrà scritta a schermo.
quindi l' utente puo sbagliare fino a 1 carattere su 4 per riuscie a trovare un risultato
*/
using System;
using System.Collections;
using System.Collections.Generic;
namespace ricecaCarattere
{
class Program
{
//hashtable per divicere i caratteri delle parole e contarle
static public Hashtable hashElaborato = new Hashtable(); // per le parole nell' array ricerca
static public Hashtable hashInput = new Hashtable(); // per la parole inserta in input (in scelta)
// funzione usata per assegnare alle Hashtable i caratteri (Key) e la quantita di volte in cui vengono ripetute nella stringa (Value)
static public void AssegnaHashTable(string parola, int numHashtable)
{
//hash che poi trasferisce tutto a una delle altre 2
Hashtable hash = new Hashtable();
//array per dividere la stringa
char[] sceltaDivisa = new char[parola.Length];
//divisione della stringa nell' array
for (int i = 0; i < parola.Length; i++)
{
sceltaDivisa[i] = parola[i];
//System.Console.WriteLine(sceltaDivisa);
}
//ciclo per contare i caratteri e aggungerli in Hash con le loro chiavi
for (int x = 0; x < parola.Length; x++)
{
int conta = 0;
for (int i = 0; i < parola.Length; i++)
{
if (sceltaDivisa[x] == sceltaDivisa[i])
{
conta++;
}
}
//condizione per non creare chiavi doppie nell' Hashtable (se no esplode tutto)
if (hash[sceltaDivisa[x]] == null)
{
hash.Add(parola[x], conta);
}
}
//1 = HashtableInput (parola cercata)
if (numHashtable == 1)
{
foreach (DictionaryEntry entry in hash)
{
hashInput.Add(entry.Key, entry.Value);
}
}
//!1 = HashtablElaborato (parola da cercare)
else
{
foreach (DictionaryEntry entry in hash)
{
hashElaborato.Add(entry.Key, entry.Value);
}
}
//scrittura della hahtable
// foreach (DictionaryEntry entry in hash)
// {
// System.Console.WriteLine($"scelta: {entry.Key}, conta: {entry.Value}");
// }
}
static void Main(string[] arg)
{
//arrey in cui inserire gli elementi da cercare
string[] ricerca = {"alberto", "albertangelo", "ugo", "riccardo", "pino","lorenzo", "edgar", "piero", "gabriele", "mattia"}; //array modificabile
//List ricercaOttenuta = new List();
//input da cui poi partirà la ricerca di parole simili
string scelta;
//ciclo doWhile per assicurarsi che scelta venga assegnata (in questo caso dovrebbe essere sempre assegnata ma in altri contesti no)
do
{
System.Console.WriteLine("inserire un nome da cercare");
scelta = Console.ReadLine();
} while (scelta == null);
//funzione per popolare Hastabla di Input
AssegnaHashTable(scelta, 1);
//ciclo per assegnare e confrontare la Hashtable Di Elaborazione (tutti gli elemnti della array Ricerca)
foreach (string item in ricerca)
{
float puntegio=0;
//funzione richiamata perr ogni elemento nell' array Ricerca
AssegnaHashTable(item, 2);
//ciclo per confrontare ogni elemento di Hashinput con ogni elemento di HashElaborato
foreach (DictionaryEntry entry in hashInput)
{
//se ci sono caratteri uguali
if (hashElaborato[entry.Key] != null)
{
puntegio++;
// se il numero di caratteri è uguale
if (hashElaborato[entry.Key].Equals(entry.Value))
{
puntegio += 3;
//System.Console.WriteLine("con = true");
}
}
}
//pulisco la HashTable per la prossima parola
hashElaborato.Clear();
//divido il puntegio per la lunghezza della stringa per far diventare il puntegio un valore relativo
puntegio /= item.Length;
//scrivo a scermo se le parole sono simili
if (puntegio>=3)
{
System.Console.WriteLine($"ricerca ha trovato {item} con un puntegio di {puntegio}");
}
// else
// {
// System.Console.WriteLine("puntegio minore di 3");
// }
}
}
}
}