Salve rgazzi ho un problema ho una frase e mi servirebbe qualcosa che quando trova lo spazio faccia scattare di 1no un contatore please mi aiutate ? grz in partenza
Salve rgazzi ho un problema ho una frase e mi servirebbe qualcosa che quando trova lo spazio faccia scattare di 1no un contatore please mi aiutate ? grz in partenza
dov'è il problema? e il codice che hai fatto?
senza quello da dove partiamo?
Immagino tu abbia una frase in una stringa, usa la funzione Split sullo spazio e avrai un array di stringhe contenenti le parole.. le conti e hai il numero di parole
grz ora dovrei praticamente contare le parole e questo nn è un problema con una semplice variabile ma devo vedere se le parole sono doppie all'interno della stringa .. mi servirebbe qualche idea cmq ora posto il codice
static void Main(string[] args)
{
// **** Variabili ****
string frase;
string[] fraseArray;
int contaParole = 0;
// **** ****
Console.Write("Dammi una frase : ");
frase = Convert.ToString(Console.ReadLine());
frase.Trim();//levo spazi iniziali e finali
PulisciFrase(ref frase);
// contare le parole
fraseArray = frase.Split(' ');
foreach (string v in fraseArray)
{
if (v.Trim() != "")
contaParole++;
}
Console.WriteLine("la frase contiene {0} parole\n ", contaParole);
Console.WriteLine(" **** ****");
Console.WriteLine("\nStampo le parole sullo schermo : ");
foreach (string v in fraseArray)
{
if (v.Trim() != "")
Console.WriteLine("{0}", v);
}
Console.WriteLine(" **** ****");
}
//pulisce la frase cn i replace levando i segni di punteggiatura e mettendo gli spazi
static void PulisciFrase(ref string frase)
{
string fraseNoVirgole = "", fraseNoPunti = "", frasePulita = "";
string fraseNoPuntoInterr = "", fraseNoPuntoVirgola = "", fraseNoPuntoEscalamativo = "";
for (int i = 0; i < frase.Length; i++)
{
fraseNoVirgole = frase.Replace(',', ' ');
fraseNoPunti = fraseNoVirgole.Replace('.', ' ');
fraseNoPuntoEscalamativo = fraseNoPunti.Replace('!', ' ');
fraseNoPuntoVirgola = fraseNoPuntoEscalamativo.Replace(';', ' ');
fraseNoPuntoInterr = fraseNoPuntoVirgola.Replace('?', ' ');
frase = fraseNoPuntoInterr;
}
Potresti ordinare l'array in ordine alfabetico, poi in un ciclo fai il confronto tra l'elemento i e i+1 se sono uguali elimini (o sostituisci così nn modifichi la lunghezza) dall'array l'elemento i e continui ripentendo il ciclo dall'elemento appena cancellato/sostituito ovvero i+1.
Ovviamente devi fare attenzione a non sforare gli indici dell'array!
Ti conviene utilizzare l'oggetto ArrayList in quanto trovi tutti i metodi per eliminare rimuovere e ordinare gli elementi.
ecco un esempio in console:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
ArrayList myarray = new ArrayList();
myarray.Add("a");
myarray.Add("a");
myarray.Add("ciao");
myarray.Add("prova");
myarray.Add("come");
myarray.Add("stai");
myarray.Add("elimina");
myarray.Add("elimina");
myarray.Add("elimina");
myarray.Add("elimina");
myarray.Add("andiamo");
myarray.Add("iPod");
myarray.Sort();
ArrayList arrOrdinato = new ArrayList();
for (int i = 0;i < myarray.Count; i++)
{
if (i < myarray.Count-1)
{
if (myarray[i].ToString() == myarray[i + 1].ToString())
{
myarray[i] = null;
}
}
else
{
if (myarray[i-1].ToString() == myarray[i].ToString())
{
myarray[i] = null;
}
}
}
//Ripulisci
CleanList(myarray);
//Stampa array definitivo
Print(myarray);
Console.ReadLine();
}
private static ArrayList CleanList(ArrayList a)
{
int len = a.Count;
for (int i = 0; i <= len-1; i++)
{
if (a[i]==null)
{
a.RemoveAt(i);
len = a.Count;
}
}
if (a.Contains(null))
{
CleanList(a);
}
return a;
}
private static void Print(ArrayList a)
{
Console.WriteLine("------");
for (int i = 0; i <= a.Count-1; i++)
{
Console.WriteLine(a[i].ToString());
}
Console.WriteLine("------");
}
}
}