Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Me To Do String
Me To Do String
Sandoval U.
CADENAS DE TEXTO..............................................................................................................................................1 1.1 LA CLASE SYSTEM.STRING ....................................................................................................................................1 1.1.1 Declaracin de un string...............................................................................................................................1 1.1.2 Operadores bsicos sobre un string..............................................................................................................1 1.1.3 Revisando los caracteres individuales de un string ......................................................................................2 1.1.4 Mtodos de la clase String ............................................................................................................................2 1.1.5 Ejemplo: Validacin de formato de un e-mail ..............................................................................................3 1.1.6 Ejemplo: Manejo de un Diccionario, incluyendo la bsqueda de palabras..................................................4 1.1.7 Ejemplo: Bsqueda y Reemplazo de Texto....................................................................................................7 1.2 TRANSFORMACIN DE OTROS TIPOS A STRING ......................................................................................................9 1.2.1 Transformacin con Formato .......................................................................................................................9
Rodrigo Sandoval U.
1 Cadenas de Texto
Los strings esencialmente son cadenas de texto, compuestas por uno o ms caracteres. Si bien no se incluyen dentro de los tipos bsicos de C#, como son el int, el double, el char, efectivamente se reconoci su enorme importancia al haberse incluido una clase String y su alias string en la base del lenguaje C#. Internamente, un string, al ser una lista de caracteres, se puede equiparar con un arreglo de char, sin embargo, dada su propia necesidad funcional, se han agregado diversos atributos y mtodos a la clase String, para simplificar y potenciar su utilizacin, hasta cierto punto ocultando su real implementacin de arreglo interna.
1.1
La clase System.String
La clase System.String, o simplemente String (cuando se incluy using System; en la primera lnea del programa) es una clase especialmente diseada para almacenar cadenas de texto, en forma de una secuencia de caracteres. Dada su importancia, una palabra reservada de C# corresponde a un alias para esta clase, al igual que en el caso de in (Int), y otros. Esta palabra clave es simplemente string.
string nombre; nombre = Juan Prez; string nombre = Juan Prez; 1.1.2 Operadores bsicos sobre un string
Adicionalmente, algunos de los operadores ms recurridos dentro de las expresiones del lenguaje C# tambin son vlidos para trabajar con strings, tal es el caso de la asignacin (=), la igualdad (==), y la suma (+). Ejemplos:
string nombre; nombre = Juan; nombre = nombre + Prez; Console.WriteLine(nombre); if( nombre == Juan Prez) Console.WriteLine(Es igual);
IIC 1102
Pgina: 1
Rodrigo Sandoval U.
<identificador>[indice]
Ejemplo:
string nombre; nombre = Juan; nombre = nombre + Prez; Console.WriteLine(Iniciales: {0}{1}, nombre[0],nombre[6]);
IIC 1102
Pgina: 2
Rodrigo Sandoval U.
Elimina todos los espacios al comienzo y al final del string. Elimina todos los espacios al final del string. Elimina todos los espacios al comienzo del string.
class Email { public static bool Validar(string email) { // string que contiene caracteres vlidos dentro de un e-mail string caracteresvalidos = "abcdefghijklmnopqrstuvwxyz1234567890_-.@"; if(email.Length<6) return (false); // Se valida sobre e-mail en minsculas y sin espacios antes y despus email = email.ToLower().Trim(); // Verifica todos los caracteres for (int i=0; i<email.Length; i++) // Es un caracter no-vlido? if( caracteresvalidos.IndexOf(email[i]) < 0 )
return(false);
// Cantidad de @ if( email.IndexOf('@') < 0 ) return (false); // No haba @ if( email.IndexOf('@') != email.LastIndexOf('@') ) return (false); // Hay ms de 1 @ // Cantidad de . a la derecha de @. // Se busca un . slo en el substring a la derecha del @ if( email.Substring(email.IndexOf('@'), email.Length-email.IndexOf('@')-1).IndexOf('.') < 0) return(false); // Que el @ no sea el primer smbolo if( email.IndexOf('@') == 0 ) return (false); return (true); } }
IIC 1102
Pgina: 3
Rodrigo Sandoval U.
class MainApp { static void Main() { string email; do { Console.Write("Ingrese su e-mail: "); email = Console.ReadLine(); } while( !Email.Validar(email) ); Console.Write("Gracias. Presione ENTER para terminar ..."); Console.ReadLine(); } }
IIC 1102
Pgina: 4
Rodrigo Sandoval U.
"ZORRO", "ZORRILLO" };
// BuscarInicio(palabra): Busca la palabra dada en todos los strings del diccionario // viendo en cules de ellos se encuentra al comienzo // Retorna: un arreglo de strings con las palabras del diccionario que coincidieron
public string[] BuscarInicio(string palabra) { string[] resultado; int cantidad = 0; int[] posiciones = new int[diccionario.Length]; // Registrar posiciones que empiezan con el string indicado (palabra) for(int i=0; i<diccionario.Length; i++) if( diccionario[i].StartsWith(palabra) ) { posiciones[cantidad] = i; cantidad++; } // Se copian los strings correspondientes resultado = new string[cantidad]; for(int i=0; i<cantidad; i++) resultado[i] = diccionario[posiciones[i]]; return(resultado); }
// BuscarFinal(palabra): Busca la palabra dada en todos los strings del diccionario // viendo en cules de ellos se encuentra al final // Retorna: un arreglo de strings con las palabras del diccionario que coincidieron
public string[] BuscarFinal(string palabra) { string[] resultado; int cantidad = 0; int[] posiciones = new int[diccionario.Length]; // Registrar posiciones que terminan con el string indicado (palabra) for(int i=0; i<diccionario.Length; i++) if( diccionario[i].EndsWith(palabra) ) { posiciones[cantidad] = i; cantidad++; } // Se copian los strings correspondientes resultado = new string[cantidad]; for(int i=0; i<cantidad; i++) resultado[i] = diccionario[posiciones[i]]; return(resultado); }
// BuscarInicio(palabra): Busca la palabra dada en todos los strings del diccionario // viendo en cules de ellos se encuentra en cualquier parte // Retorna: un arreglo de strings con las palabras del diccionario que coincidieron
public string[] Buscar(string palabra) { string[] resultado; int cantidad = 0; int[] posiciones = new int[diccionario.Length]; // Registrar las posiciones que contienen el string indicado (palabra) for(int i=0; i<diccionario.Length; i++) if( diccionario[i].IndexOf(palabra)>=0 ) { posiciones[cantidad] = i; cantidad++; } // Se copian los strings correspondientes resultado = new string[cantidad]; for(int i=0; i<cantidad; i++)
IIC 1102
Pgina: 5
Rodrigo Sandoval U.
class MainApp { static void Main() { Diccionario d = new Diccionario(); string palabra; string[] resultado; Console.Write("Indique la palabra a buscar: "); palabra = Console.ReadLine(); // El string ingresado por el usuario debe ser filtrado: // Primero, eliminar todos los espacios blancos, al comienzo y al final palabra = palabra.Trim(); Console.WriteLine("Buscando: \"{0}\"", palabra); // Segundo, la palabra debe venir en maysculas palabra = palabra.ToUpper(); Console.WriteLine("Buscando: \"{0}\"", palabra); // Primero, los strings que comienzan con la palabra Console.WriteLine("Los sig. strings comienzan con \"{0}\":",palabra); resultado = d.BuscarInicio(palabra); foreach(string s in resultado) Console.WriteLine(s); // Segundo, los strings que terminan con la palabra Console.WriteLine("Los sig. strings terminan con \"{0}\":",palabra); resultado = d.BuscarFinal(palabra); foreach(string s in resultado) Console.WriteLine(s); // Tercero, los strings que contienen la palabra Console.WriteLine("Los siguientes strings contienen \"{0}\":",palabra); resultado = d.Buscar(palabra); foreach(string s in resultado) Console.WriteLine(s); Console.ReadLine(); } }
Ejemplos de Ejecucin Indique la palabra a buscar: oso Buscando: "oso" Buscando: "OSO" Los siguientes strings comienzan con "OSO": OSO OSO HORMIGUERO Los siguientes strings terminan con "OSO": OSO PEREZOSO Los siguientes strings contienen "OSO": OSO OSO HORMIGUERO PEREZOSO
IIC 1102
Pgina: 6
Rodrigo Sandoval U.
Indique la palabra a buscar: mo Buscando: "mo" Buscando: "MO" Los siguientes strings comienzan con "MO": MONO MORSA Los siguientes strings terminan con "MO": HIPOPOTAMO Los siguientes strings contienen "MO": CORMORAN HIPOPOTAMO MONO MORSA SALTAMONTES
public void BuscarReemplazar(string str1, string str2) { int posicion = 0; // Se comienza desde el primer caracter (-1+1 = 0) int indice = 0; string copiatexto;
IIC 1102
Pgina: 7
Rodrigo Sandoval U.
do { // Se busca la sig. posicin en que str1 est en el texto indice = texto.Substring(posicion,texto.Length-posicion).IndexOf(str1); // Si la posicin es vlida, se procesa el reemplazo if ( indice >= 0 ) { // Se eliminan los caracteres del str1 // de la posicin encontrada (pero en la original) texto = texto.Remove(posicion+indice,str1.Length); // Se inserta el nuevo string (str2) en la misma posicin texto = texto.Insert(posicion+indice,str2); posicion += indice; } } while(indice>=0); } public void BuscarReemplazarDirecto(string str1, string str2) { str1 = str1.ToLower(); // El texto a buscar tambin se deja en minsculas. texto = texto.Replace(str1,str2); } }
class MainApp { static void Main() { Reemplazo r = new Reemplazo(); string str1; string str2; Console.WriteLine("** Bsqueda-Reemplazo de texto **"); Console.WriteLine("\nTexto: \"{0}\"\n", r.texto); Console.Write("Texto a buscar: "); str1 = Console.ReadLine().Trim(); Console.Write("Texto de reemplazo: "); str2 = Console.ReadLine().Trim(); // Se efecta el reemplazo y se muestra el resultado r.BuscarReemplazar(str1,str2); Console.WriteLine("\nTexto modificado: \"{0}\"\n", r.texto); Console.ReadLine(); } }
Ejemplos de Ejecucin ** Bsqueda-Reemplazo de texto ** Texto: "En la casa del explorador, se encuentra todo tipo de cosas, incluyendo fotografas de recuerdo. Estos objetos son parte de la historia de este explorador, a travs de los aos y kilmetros que ha recorrido" Texto a buscar: la Texto de reemplazo: lo Texto modificado: "En lo casa del explorador, se encuentra todo tipo de cosas, incluyendo fotografas de recuerdo. Estos objetos son parte de lo historia de este explorador, a travs de los aos y kilmetros que ha recorrido"
IIC 1102
Pgina: 8
Rodrigo Sandoval U.
1.2
Es comn requerir que datos, que se almacenan en otro tipo de dato de origen, como podra ser un int, char, float, double, quieran ser transformados a string. Las clases en C#, proveen naturalmente el mtodo ToString(), que efectivamente transforma el dato correspondiente a un string, incluyendo funcionalidad de formato. Ejemplo: // Transformacin bsica int numero = 10; string num = El nmero es + numero.ToString();
Ejemplo:
//////////////////////////////////////////////////////////////////////////////// // Transformacin de tipos bsicos a strings con formato. Uso de ToString() ///////////////////////////////////////////////////////////////////////////////// using System; class ValoresNumericos { static void Main() { int[] valores = new int[4]; Console.WriteLine("Proceso de cantidades monetarias"); for(int i=0; i<valores.Length; i++) {
IIC 1102
Pgina: 9
Rodrigo Sandoval U.
Console.Write("Ingrese el monto {0}: ",i+1); valores[i] = int.Parse(Console.ReadLine()); } // Ntese que el formato moneda viene de la configuracin de Windows Console.WriteLine("Los montos son: "); foreach(int n in valores) Console.Write("{0}, ", n.ToString("C")); // C: currency (moneda)
int contador=0; foreach(int n in valores) // Cuenta montos sobre $100 if(n>100) contador++; Console.WriteLine("De ellos, el {0} es mayor que {1:C}", ((float)contador/ valores.Length).ToString("P"),100);
Console.ReadLine();
Ejemplos de Ejecucin Proceso de cantidades monetarias Ingrese el monto 1: 150 Ingrese el monto 2: 1200 Ingrese el monto 3: 23 Ingrese el monto 4: 33 Los montos son: $ 150, $ 1.200, $ 23, $ 33, De ellos, el 50,00 % es mayor que $ 100 Presione ENTER para terminar ...
IIC 1102
Pgina: 10