Hemos visto cómo leer cadenas de caracteres (Console.ReadLine) y cómo mostrarlas en pantalla (Console.Write), así como la forma de darles un valor (=) y de comparar cual es su valor (==).
Vamos a repasar todas esas posibilidades, junto con la de formar una cadena a partir de otras si las unimos con el símbolo de la suma (+), lo que llamaremos "concatenar" cadenas. Un ejemplo que nos pidiese nuestro nombre y nos saludase usando todo ello podría ser:
// Ejemplo_04_04_01a.cs
// Cadenas de texto (1: manejo básico)
// Introducción a C#, por Nacho Cabanes
using System;
public class Ejemplo_04_04_01a
{
public static void Main()
{
string saludo = "Hola";
string segundoSaludo;
string nombre, despedida;
segundoSaludo = "Que tal?";
Console.WriteLine("Dime tu nombre... ");
nombre = Console.ReadLine();
Console.WriteLine("{0} {1}", saludo, nombre);
Console.WriteLine(segundoSaludo);
if (nombre == "Alberto")
Console.WriteLine("Dices que eres Alberto?");
else
Console.WriteLine("Así que no eres Alberto?");
despedida = "Adios " + nombre + "!";
Console.WriteLine(despedida);
}
}
Ejercicios propuestos:
Ejercicio propuesto 4.4.1.1: Crea un programa que te pida tu nombre y lo escriba 5 veces.
Ejercicio propuesto 4.4.1.2: Crea un programa que pida al usuario su nombre. Si se llama como tú (por ejemplo, "Nacho"), responderá "Bienvenido, jefe". En caso contrario, le saludará por su nombre.
Ejercicio propuesto 4.4.1.3: Un programa que pida tu nombre, tu día de nacimiento y tu mes de nacimiento y lo junte todo en una cadena, separando el nombre de la fecha por una coma y el día del mes por una barra inclinada, así: "Juan, nacido el 31/12".
Ejercicio propuesto 4.4.1.4: Crea un programa que pida al usuario dos números enteros y después una operación que realizar con ellos. La operación podrá ser "suma", "resta", multiplicación" y "división", que también se podrán escribir de forma abreviado con los operadores matemáticos "+", "-", "*" y "/". Para multiplicar también se podrá usar una "x", minúscula o mayúscula. A continuación se mostrará el resultado de esa operación (por ejemplo, si los números son 3 y 6 y la operación es "suma", el resultado sería 9). La operación debes tomarla como una cadena de texto y analizarla con un "switch".
Podemos leer una de las letras de una cadena, de igual forma que leemos los elementos de cualquier array: si la cadena se llama "texto", el primer elemento será texto[0], el segundo será texto[1] y así sucesivamente.
Eso sí, las cadenas en C# no se pueden modificar letra a letra: no podemos hacer texto[0]='a'. Para eso habrá que usar una construcción auxiliar, que veremos más adelante.
// Ejemplo_04_04_02a.cs
// Cadenas de texto (2: acceder a una letra)
// Introducción a C#, por Nacho Cabanes
using System;
public class Ejemplo_04_04_02a
{
public static void Main()
{
string saludo = "Hola";
Console.WriteLine("La tercera letra de {0} es {1}",
saludo, saludo[2]);
}
}
Ejercicios propuestos:
Ejercicio propuesto 4.4.2.1: Crea un programa que pregunte al usuario su nombre y le responda cuál es su inicial.
Podemos saber cuantas letras forman una cadena con "cadena.Length". Esto permite que podamos recorrer la cadena letra por letra, usando construcciones como "for".
// Ejemplo_04_04_03a.cs
// Cadenas de texto (3: longitud)
// Introducción a C#, por Nacho Cabanes
using System;
public class Ejemplo_04_04_03a
{
public static void Main()
{
string saludo = "Hola";
int longitud = saludo.Length;
Console.WriteLine("La longitud de {0} es {1}", saludo, longitud);
for (int i=0; i
Ejercicios propuestos:
Ejercicio propuesto 4.4.3.1: Un programa que te pida tu nombre y lo muestre en pantalla separando cada letra de la siguiente con un espacio. Por ejemplo, si tu nombre es "Juan", debería aparecer en pantalla "J u a n".
Ejercicio propuesto 4.4.3.2: Un programa que pida una frase al usuario y la muestra en orden inverso (de la última letra a la primera).
Ejercicio propuesto 4.4.3.3: Un programa que pida al usuario una frase, después una letra y finalmente diga si aparece esa letra como parte de esa frase o no.
Ejercicio propuesto 4.4.3.4: Un programa capaz de sumar dos números enteros muy grandes (por ejemplo, de 30 cifras), que se deberán pedir como cadena de texto y analizar letra a letra.
Ejercicio propuesto 4.4.3.5: Un programa capaz de multiplicar dos números enteros muy grandes (por ejemplo, de 30 cifras), que se deberán pedir como cadena de texto y analizar letra a letra.
Podemos extraer parte del contenido de una cadena con "Substring", que recibe dos parámetros: la posición a partir de la que queremos empezar y la cantidad de caracteres que queremos obtener. El resultado será otra cadena:
saludo = frase.Substring(0,4);
Podemos omitir el segundo número, y entonces se extraerá desde la posición indicada hasta el final de la cadena.
// Ejemplo_04_04_04a.cs
// Cadenas de texto (4: substring)
// Introducción a C#, por Nacho Cabanes
using System;
public class Ejemplo_04_04_04a
{
public static void Main()
{
string saludo = "Hola";
string subcadena = saludo.Substring(1,3);
Console.WriteLine("Una subcadena de {0} es {1}",
saludo, subcadena);
}
}
Ejercicios propuestos:
Ejercicio propuesto 4.4.4.1: Un programa que te pida tu nombre y lo muestre en pantalla separando cada letra de la siguiente con un espacio, similar al 4.4.3.1, pero esta vez usando "Substring". Por ejemplo, si tu nombre es "Juan", debería aparecer en pantalla "J u a n".
Ejercicio propuesto 4.4.4.2: Un programa que te pida tu nombre y lo muestre en pantalla como un triángulo creciente. Por ejemplo, si tu nombre es "Juan", debería aparecer en pantalla:
J
Ju
Jua
Juan
Para ver si una cadena contiene un cierto texto, podemos usar IndexOf ("posición de"), que nos dice en qué posición se encuentra, siendo 0 la primera posición (o devuelve el valor -1, si no aparece):
if (nombre.IndexOf("Juan") >= 0) Console.Write("Bienvenido, Juan");
Podemos añadir un segundo parámetro opcional, que es la posición a partir de la que queremos buscar:
if (nombre.IndexOf("Juan", 5) >= 0) ...
La búsqueda termina al final de la cadena, salvo que indiquemos que termine antes con un tercer parámetro opcional:
if (nombre.IndexOf("Juan", 5, 15) >= 0) ...
De forma similar, LastIndexOf ("última posición de") indica la última aparición (es decir, busca de derecha a izquierda).
Si solamente queremos ver si aparece, pero no nos importa en qué posición está, nos bastará con usar "Contains":
if (nombre.Contains("Juan")) ...
Un ejemplo de la utilización de IndexOf podría ser:
// Ejemplo_04_04_05a.cs
// Cadenas de texto (5: substring)
// Introducción a C#, por Nacho Cabanes
using System;
public class Ejemplo_04_04_05a
{
public static void Main()
{
string saludo = "Hola";
string subcadena = "ola";
Console.WriteLine("{0} aparece dentro de {1} en la posición {2}",
subcadena, saludo, saludo.IndexOf(subcadena) );
}
}
Ejercicios propuestos:
Ejercicio propuesto 4.4.5.1: Un programa que te pida tu nombre y lo muestre en pantalla separando cada letra de la siguiente con un espacio, similar al 4.4.3.1, pero esta vez usando "Substring". Por ejemplo, si tu nombre es "Juan", debería aparecer en pantalla "J u a n".
Ejercicio propuesto 4.4.5.2: Un programa que te pida tu nombre y lo muestre en pantalla como un triángulo creciente. Por ejemplo, si tu nombre es "Juan", debería aparecer en pantalla:
J
Ju
Jua
Juan