C++ Variables de tipo string (avanzado)

Enviado por jvilella el Lun, 23/09/2019 - 04:02

Requisitos:

Un string en realidad es un conjunto ordenado de letras (caracteres). Supongamos que tienes:

string nombre = "Juan";

nombre es una variable que contiene 4 caracteres: la J, la u, la a y la n.

Se puede acceder a cada uno de los elementos de este conjunto refiriéndose a la posición que ocupan, empezando por el 0. Es decir:
Puedes acceder a la J con nombre[0]
Puedes acceder a la u con nombre[1]
Puedes acceder a la a con nombre[2]
Puedes acceder a la n con nombre[3]

También puedes modificar las posiciones, por ejemplo, "nombre[0] = 'X'" hará que nombre pase a ser "Xuan".

Podemos modificar letras, pero no podemos añadir ni eliminar letras, es decir, si hago "nombre[4] = 'a';" el programa probablemente fallará, porque la variable nombre es un conjunto de 4 elementos (numerados del 0 hasta al 3), no existe ningún elemento en la posición 4 y por tanto no podemos hacer una modificación en esa posición.

Fíjate que para poner una letra ponemos comillas simples, no dobles. El motivo es que las comillas dobles son para strings, y las simples para caracteres individuales. Es decir, cuando pongo comillas dobles estoy diciendo que lo que hay entre comillas es un conjunto de elementos, mientras que cuando pongo comillas simples estoy diciendo que lo que hay entre comillas es un único elemento, que es un carácter.

Para saber cuantas letras tiene un string debes de usar su subinstrucción "size()", por ejemplo, nombre.size() es 4 porque "Juan" tiene 4 letras. Dicho de otra manera, cuando una variable contiene un conjunto, puedes utilizar el nombre de la variable seguido de ".size()" para conocer cuántos elementos contiene este conjunto.

Podemos usar una variable de tipo int para indicar una posición:

string nombre = "juan";
int posicion;
cout << "Indica una posicion y la covnertire en mayuscula: ";
cin >> posicion;
nombre[posicion] = nombre[posicion] - 32;
cout << nombre;

 

Printer Friendly, PDF & Email

Comentarios

Hola buenas noches, es para saber que variable puedo utilizar que el programa me almacene dos palabras como respuesta, ejemplo:

que una pregunta me haga contestar "si" o "no"

muchas gracias

tengo una string que en el contenido tiene el nombre de otra variable que quiero modificar

String hola;
int nivel 1;
int nivel 2;
int numero = 2;

hola = ("Nivel" + numero) = //Nivel2 o Nivel1 puede variar
//como lo hago para seleccionar la variable que se llama como la string?
hola.substring(0,6) = (lo que sea)
//pero eso no funciona

Me parece que es porque pusiste Nivel con mayúscula, siendo que lo definiste como nivel todo en minuscula

Al mostrar el tamaño en byte de una variable de la clase string en c++ el compilador de 32 bits me informa 16 bytes y en un compilador de 64 bits me informa el doble, es decir, 32 bytes.
string str;
cout << str.size(); // en arquitectura de 32 bits informa 16 bytes, en arquitectura de 64 bits informa 32 bytes.
str = "supercalifrastilisticoespialidozo";
cout << str.size(); // sigue siendo el mismo espacio, es decir, es fijo str. 16 bytes en arquitectura de 32 bits o 32 bytes en arquitectura de 64 bits.
Considero que su contenido está dividido en 4 partes iguales, en el primer caso de 4 bytes c/u. y en el segundo caso de 8 bytes c/u.
Estimo que c/u. de estas partes representaría lo siguiente:
1. Puntero al comienzo en donde se guarda la cadena.
2. Puntero al final en donde se guarda la cadena.
3. Entero que indica la longitud lógica (dinámica) de la cadena.
4. Entero que indica el espacio remanente de la cadena (capacity - size).
No hay demasiada información al respecto en internet al respecto.
¿Podrán chequear esta información que les brindo?.

Hola Hugo,

O no he comprendido bien lo que explicas, o lo que comentas es muy extraño.
size() informa de la cantidad de bytes que ocupa el contenido de la variable. Si la variable string str contiene tiene 7 letras del alfabeto inglés, por ejemplo AAAAAAA el resultado de str.size() será 7.
size() no muestra el tamaño del puntero (para eso deberías usar sizeof() por ejemplo sizeof(&str)).

Los 4 puntos que describes NO son como se almacena un string. De hecho, después de leer la estructura que has imaginado... la manera como realmente se almacena te decepcionará bastante :D Funciona así:
La variable realmente solo almacena la posición de memoria RAM donde empieza el string (por eso, sizeof(&str) te mostrará 4 en sistemas de 32bits (4 Byes de 8 bits cada uno = 32 bits) y 8 en sistemas de 64 bits).
A partir de ahí, C++ considerará como un mismo string todo lo que venga a continuación en la memoria RAM hasta encontrar el valor 0 (no el carácter ASCII 0, valor 48, sino el valor 0, descrito en la tabla ASCII como NULL).

cuando compilo me da error con el mensaje: 'string' does not name a type; esto a pesar de ya haber puesto la librería #include<string> e incluso le intenté con #include<string.h> y nomas no

Tendrías que hacer un bucle de tantas repeticiones como letras tenga el string e ir seleccionando en cada repeticion, de manera aleatoria (usando rand() por ejemplo) qué posición del string mostrar... y no mostrar la misma posición dos veces (puedes eliminar la posición del string una vez mostrada, o marcarla, o manener una lista aparte de posiciones mostradas o de posiciones no mostradas, etc. hay muchas maneras).

Añadir nuevo comentario

Texto sin formato

  • No se permiten etiquetas HTML.
  • Saltos automáticos de líneas y de párrafos.
  • Las direcciones de correos electrónicos y páginas web se convierten en enlaces automáticamente.