13 - Variables de tipo string

Hasta ahora en nuestros programas solo hemos definido variables que pueden almacenar valores enteros y reales:

int
float64
float32

Si necesitamos almacenar un conjunto de caracteres en el lenguaje Go debemos definir una variable de tipo string.

Problema 1:

Definir 4 variables de tipo string que almacenen los nombres de países sudamericanos. Imprimir su contenido.

Programa: ejercicio059.go

package main

import "fmt"

func main() {
    var pais1, pais2, pais3, pais4 string
    pais1 = "Argentina"
    pais2 = "Chile"
    pais3 = "Brasil"
    pais4 = "Guayana Francesa"
    fmt.Println("Listado de 4 paises sudamericanos")
    fmt.Print(pais1,"-",pais2,"-",pais3,"-",pais4)
}

Como vemos para definir una variable de tipo string lo hacemos de forma similar a la definición de enteros y reales.

En una variable de tipo string podemos cargar una cantidad variable de caracteres.

Una vez cargado los caracteres a un string no se pueden cambiar:

var pais1 as string
pais1="argentina"

No podemos cambiar el primer caracter por una "A", ya que es un string.

Pero si podemos cambiar todo el string por otro:

var pais1 as string
pais1="argentina"
.....
pais1="Argentina"

Lo anterior si está permitido.

Podemos definir una variable de tipo string por inferencia para que el compilador detecte que se trata de un string sin tener que decirlo en forma explícita, el programa anterior quedaría como sigue:

Programa: ejercicio060.go

package main

import "fmt"

func main() {
    pais1 := "Argentina"
    pais2 := "Chile"
    pais3 := "Brasil"
    pais4 := "Guayana Francesa"
    fmt.Println("Listado de 4 paises sudamericanos")
    fmt.Print(pais1,"-",pais2,"-",pais3,"-",pais4)
}

Problema 2:

Ingresar los nombres de dos países y su cantidad de habitantes. Mostrar el nombre del país que tiene más habitantes.

Programa: ejercicio061.go

package main

import "fmt"

func main() {
    var pais1, pais2 string
    var cant1, cant2 int
    fmt.Print("Nombre de país:")
    fmt.Scan(&pais1)
    fmt.Print("Cantidad de habitantes:")
    fmt.Scan(&cant1)
    fmt.Print("Nombre de país:")
    fmt.Scan(&pais2)
    fmt.Print("Cantidad de habitantes:")
    fmt.Scan(&cant2)    
    if cant1 > cant2 {
        fmt.Println("El pais ", pais1, " tiene más habitantes:", cant1)
    } else {
        fmt.Println("El pais ", pais2, " tiene más habitantes:", cant2)
    }
}

Para cargar un string lo hacemos por el momento utilizando la función Scan del paquete fmt. Lo importante es tener en cuenta una característica de la función Scan que no permite cargar un caracter en blanco, es decir que por ahora siempre que carguemos string evitemos cargar el espacio en blanco. Un poco más adelante veremos como podemos hacer la carga de string con espacios en blanco.

Problema 3:

Ingresar dos nombres de personas por teclado y luego imprimir el que es menor alfabéticamente hablando.

Programa: ejercicio062.go

package main

import "fmt"

func main() {
    var nombre1, nombre2 string
    fmt.Print("Ingrese primer nombre:")
    fmt.Scan(&nombre1)
    fmt.Print("Ingrese segundo nombre:")
    fmt.Scan(&nombre2)
    if nombre1 < nombre2 {
        fmt.Print(nombre1, " es menor alfabéticamente hablando")
    } else {
        fmt.Print(nombre2, " es menor alfabéticamente hablando")
    }
}

Podemos utilizar cualquiera de los operadores relacionales para comparar dos variables de tipo string.

Problemas propuestos

  • Ingresar dos nombres de personas y mostrarlos ordenados en forma alfabética.
  • Ingresar valores enteros por teclado y sumarlos. Cada vez que se carga un valor pedir si quiere continuar con la carga de otro dato ingresando el string "si" o "no".
Solución
ejercicio063.go

package main

import "fmt"

func main() {
    var nombre1, nombre2 string
    fmt.Print("Ingrese primer nombre:")
    fmt.Scan(&nombre1)
    fmt.Print("Ingrese segundo nombre:")
    fmt.Scan(&nombre2)
    fmt.Println("Listado de nombres en forma alfabética")
    if nombre1 < nombre2 {
        fmt.Print(nombre1, " ", nombre2)
    } else {
        fmt.Print(nombre2, " ", nombre1)
    }
}




ejercicio064.go

package main

import "fmt"

func main() {
    var valor int
    var opcion string
    suma := 0
    for {
        fmt.Print("Ingrese un entero:")
        fmt.Scan(&valor)
        suma = suma + valor
        fmt.Print("Desea cargar otro valor[si/no]?")
        fmt.Scan(&opcion)
        if opcion=="no" {
            break
        }
    }
    fmt.Print("La suma de los valores ingresados es ", suma)
}