Autor Tema: [DUDA] Procesar string  (Leído 2016 veces)

Desconectado Warlox

  • Moderadores PHP
  • PHPero Master
  • ****
  • Mensajes: 1.278
  • Karma: 77
  • Sexo: Masculino
  • A veces hay que aprender a correr antes de caminar
    • Ver Perfil
    • Página personal
[DUDA] Procesar string
« en: 20 de Noviembre de 2010, 18:21:46 pm »
¡Hola!

Verán, tengo un pequeño problema; quiero pedirle al usuario que ingrese X texto mediante cin, en el cual luego quiero comprobar si se escribió algo, hasta ahora, lo que hice fue un bucle, pero este me da error, a ver si me pueden ayudar  :-[

gotoxy(24,8);
bool salir = false;
string nombreScript;
   
while(!salir)
{
   cin >> noskipws >> nombreScript;
   cout << "N";
       
   if(nombreScript == "a")
   {
      salir = true;
   } 
}   
   
cout << "LISTO!";
getch();

A ver si me pueden ayudar :-S
Saludos ^^
- Moderador de PHP


Comunidad PHPeros

[DUDA] Procesar string
« en: 20 de Noviembre de 2010, 18:21:46 pm »

Desconectado Siquillote

  • PHPero Master
  • ******
  • Mensajes: 4.229
  • Karma: 179
  • Sexo: Masculino
    • Ver Perfil
Re:[DUDA] Procesar string
« Respuesta #1 en: 20 de Noviembre de 2010, 18:29:27 pm »

No tienes por que usar un bucle para comprobar si se ha escrito algo. Es como PHP, solo basta con hacer un IF. Veo que estás trabajando con un tipo bool (Por cierto, ¿Estás usando las librerías correspondientes? Es que como no las has puesto...) así que todo valdría con usar esto:

Código: [Seleccionar]
#include <stdio.h>
#include <conio.h>

int main(){
      bool salir = false;
      int numero;

          printf("Escribe algun numero... ");
          scanf("%d", &numero);

                 if(numero){
                       salir = true;
                 } else {
                       salir = false;
                 }
getch();
}

No te garantizo que funcione por que lo he echo sobre la marcha y además que estoy como tú, aprendiendo ;)

#Fdo. Physlet

Desconectado gink

  • PHPer@ Fijo
  • ***
  • Mensajes: 146
  • Karma: 10
  • Sexo: Masculino
    • Ver Perfil
    • Mi blog personal
Re:[DUDA] Procesar string
« Respuesta #2 en: 20 de Noviembre de 2010, 18:35:14 pm »
Exactamente como dijo siquillote :)

Luego si quieres contar cuantos caracteres tiene, puedes usar strlen (Yo lo uso en char, no se si funciona con string; Aunque deberia porque pertenece a string.h)

Código: [Seleccionar]
cout<<"Di algo"<<endl;
cin>>char dicho[999];

cout<<"Dijiste: "<<strlen (dicho)<<" caracteres"<<endl;

Alli tienes que usar las siguientes incluidas:
Código: [Seleccionar]
#include <iostream.h>
#include<string.h>

endl es fin de linea, para que de un salto y no lo escriba todo junto.


¡Cuidate!

Me corrijo: No se puede declarar una variable dentro de cin.
Por lo tanto quedaria:
Código: [Seleccionar]
char dicho[999];
cout<<"Di algo"<<endl;
cin>>dicho;

cout<<"Dijiste: "<<strlen (dicho)<<" caracteres"<<endl;

Tambien olvide decirte que el char dicho[999] es un conjunto de caracteres (En este caso, hasta 999 caracteres).
« Última modificación: 20 de Noviembre de 2010, 18:38:33 pm por gink »

Desconectado Warlox

  • Moderadores PHP
  • PHPero Master
  • ****
  • Mensajes: 1.278
  • Karma: 77
  • Sexo: Masculino
  • A veces hay que aprender a correr antes de caminar
    • Ver Perfil
    • Página personal
Re:[DUDA] Procesar string
« Respuesta #3 en: 20 de Noviembre de 2010, 20:15:55 pm »
Vale, aclaro, creo que no me expliqué bien. En dicha parte del programa, les pido que introduzcan un valor, peeeero, quiero que si pulsan la tecla "enter" sin haber escrito ningún carácter, el programa lo ignore y siga pidiéndole que escriban el valor, ¿entienden?
- Moderador de PHP


Desconectado Siquillote

  • PHPero Master
  • ******
  • Mensajes: 4.229
  • Karma: 179
  • Sexo: Masculino
    • Ver Perfil
Re:[DUDA] Procesar string
« Respuesta #4 en: 20 de Noviembre de 2010, 20:37:30 pm »
Pues muy fácil, con el código que te he dado, vuelves a hacer otro IF y punto de esta manera:

Código: [Seleccionar]
#include <stdio.h>
#include <conio.h>

int main(){
      bool salir = false;
      int numero;

         if(salir == true){
             printf("Ok, has escrito algo :P");
         } else {
         
                   printf("Escribe algun numero... ");
                   scanf("%d", &numero);

                           if(numero){
                                salir = true;
                           } else {
                                salir = false;
                           }
         }
getch();
}

#Fdo. Physlet

Desconectado gink

  • PHPer@ Fijo
  • ***
  • Mensajes: 146
  • Karma: 10
  • Sexo: Masculino
    • Ver Perfil
    • Mi blog personal
Re:[DUDA] Procesar string
« Respuesta #5 en: 20 de Noviembre de 2010, 22:29:06 pm »
Pues muy fácil, con el código que te he dado, vuelves a hacer otro IF y punto de esta manera:

Código: [Seleccionar]
#include <stdio.h>
#include <conio.h>

int main(){
      bool salir = false;
      int numero;

         if(salir == true){
             printf("Ok, has escrito algo :P");
         } else {
         
                   printf("Escribe algun numero... ");
                   scanf("%d", &numero);

                           if(numero){
                                salir = true;
                           } else {
                                salir = false;
                           }
         }
getch();
}

Allí faltaria un while, cuando tenga tiempo lo escribo completo.
¡Cuidense!

Desconectado Farresito

  • PHPero Avanzado
  • ****
  • Mensajes: 385
  • Karma: 5
  • Sexo: Masculino
  • PimPamTomaC++
    • Ver Perfil
    • Farresito
Re:[DUDA] Procesar string
« Respuesta #6 en: 20 de Noviembre de 2010, 22:32:17 pm »
Pues muy fácil, con el código que te he dado, vuelves a hacer otro IF y punto de esta manera:

Código: [Seleccionar]
#include <stdio.h>
#include <conio.h>

int main(){
      bool salir = false;
      int numero;

         if(salir == true){
             printf("Ok, has escrito algo :P");
         } else {
         
                   printf("Escribe algun numero... ");
                   scanf("%d", &numero);

                           if(numero){
                                salir = true;
                           } else {
                                salir = false;
                           }
         }
getch();
}
No me funciona tu código ???

Por cierto, porque añades un Getch? Que yo sepa, no quieres almacenar nada ^^ Me refiero a la ultima linea
Kevin, prueba este. Lo que no se es porqué, aunque no le metas valor, no te vuelve a decir la frase "Introduce el número", sino que se queda con los espacios, tendría que mirarlo con más cuidado, pero estoy con exámenes y apenas tengo tiempo:
Código: [Seleccionar]
#include <stdio.h>
#include <conio.h>

int main (){
    int numero;
    printf("Bienvenido! Introduce un valor:\n ");
    scanf ("%d", &numero);
        while (!numero){
            printf("Introduce el número por favor: \n");
            scanf("%d", &numero);
        }
    printf ("Este es el número introducido: %d", numero);
}

Un abrazo. Perdona la demora, pero estoy estudiando :)
« Última modificación: 20 de Noviembre de 2010, 22:35:10 pm por Farresito »
“Lo mejor de los booleanos es que si te equivocas estás a un sólo bit de la solución correcta.”

-- Anónimo

"No temo a los ordenadores; lo que temo es quedarme sin ellos"

-- Isaac Asimov

Desconectado Siquillote

  • PHPero Master
  • ******
  • Mensajes: 4.229
  • Karma: 179
  • Sexo: Masculino
    • Ver Perfil
Re:[DUDA] Procesar string
« Respuesta #7 en: 20 de Noviembre de 2010, 22:56:00 pm »
No me funciona tu código ???

Por cierto, porque añades un Getch? Que yo sepa, no quieres almacenar nada ^^ Me refiero a la ultima linea
Kevin, prueba este. Lo que no se es porqué, aunque no le metas valor, no te vuelve a decir la frase "Introduce el número", sino que se queda con los espacios, tendría que mirarlo con más cuidado, pero estoy con exámenes y apenas tengo tiempo:
Código: [Seleccionar]
#include <stdio.h>
#include <conio.h>

int main (){
    int numero;
    printf("Bienvenido! Introduce un valor:\n ");
    scanf ("%d", &numero);
        while (!numero){
            printf("Introduce el número por favor: \n");
            scanf("%d", &numero);
        }
    printf ("Este es el número introducido: %d", numero);
}

Un abrazo. Perdona la demora, pero estoy estudiando :)

No ni a mi, lo he hecho a ras y no lo he puesto en practica. A ver si pienso un poquito y te ayudamos kevin ;)

#Fdo. Physlet

Desconectado Farresito

  • PHPero Avanzado
  • ****
  • Mensajes: 385
  • Karma: 5
  • Sexo: Masculino
  • PimPamTomaC++
    • Ver Perfil
    • Farresito
Re:[DUDA] Procesar string
« Respuesta #8 en: 21 de Noviembre de 2010, 00:07:42 am »
Siqui, para esperar el Intro, yo usaría anter el Getchar que el Getch. Es mucho más usado, y me fiaría mas ;)

Un abrazo

PD: Aunque será parecido, pero de cara a un proyecto compartido, creo que sería mas conveniente
“Lo mejor de los booleanos es que si te equivocas estás a un sólo bit de la solución correcta.”

-- Anónimo

"No temo a los ordenadores; lo que temo es quedarme sin ellos"

-- Isaac Asimov

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:[DUDA] Procesar string
« Respuesta #9 en: 21 de Noviembre de 2010, 00:25:08 am »
Vale, aclaro, creo que no me expliqué bien. En dicha parte del programa, les pido que introduzcan un valor, peeeero, quiero que si pulsan la tecla "enter" sin haber escrito ningún carácter, el programa lo ignore y siga pidiéndole que escriban el valor, ¿entienden?

Yo lo haría con un bucle do-while
Quiero decir:

HACER {
   // Pedir string a usuario y guardar en variable "cadena"
} MIENTRAS QUE(variable "cadena" este vacía);

Con eso haces lo que quieres. Si sabes usar el do-while sabrás como hacerlo, es bastante sencillo!

Saludos!
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado Farresito

  • PHPero Avanzado
  • ****
  • Mensajes: 385
  • Karma: 5
  • Sexo: Masculino
  • PimPamTomaC++
    • Ver Perfil
    • Farresito
Re:[DUDA] Procesar string
« Respuesta #10 en: 21 de Noviembre de 2010, 00:45:22 am »
Yo lo haría con un bucle do-while
Quiero decir:

HACER {
   // Pedir string a usuario y guardar en variable "cadena"
} MIENTRAS QUE(variable "cadena" este vacía);

Con eso haces lo que quieres. Si sabes usar el do-while sabrás como hacerlo, es bastante sencillo!

Saludos!
También es muy buena opción :) Si al fin y al cabo hay miles de soluciones, pero lo importante es que sepas lo que hace, y más cuando estás aprendiendo  :P

Un abrazo
“Lo mejor de los booleanos es que si te equivocas estás a un sólo bit de la solución correcta.”

-- Anónimo

"No temo a los ordenadores; lo que temo es quedarme sin ellos"

-- Isaac Asimov

Desconectado gink

  • PHPer@ Fijo
  • ***
  • Mensajes: 146
  • Karma: 10
  • Sexo: Masculino
    • Ver Perfil
    • Mi blog personal
Re:[DUDA] Procesar string
« Respuesta #11 en: 21 de Noviembre de 2010, 01:28:52 am »
Yo lo haría con un bucle do-while
Quiero decir:

HACER {
   // Pedir string a usuario y guardar en variable "cadena"
} MIENTRAS QUE(variable "cadena" este vacía);

Con eso haces lo que quieres. Si sabes usar el do-while sabrás como hacerlo, es bastante sencillo!

Saludos!
Siempre olvido el DO WHILE, a diferencia del WHILE este hace y luego comprueba.

En cuanto al codigo ya te lo dejo Farresito

Desconectado Warlox

  • Moderadores PHP
  • PHPero Master
  • ****
  • Mensajes: 1.278
  • Karma: 77
  • Sexo: Masculino
  • A veces hay que aprender a correr antes de caminar
    • Ver Perfil
    • Página personal
Re:[DUDA] Procesar string
« Respuesta #12 en: 21 de Noviembre de 2010, 04:13:26 am »
Vale, he utilizado el bucle DO... WHILE, pero se me crea un bucle infinito :-S, vean como lo he hecho:

Código: [Seleccionar]
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string texto;
   
    do
    {
        cout << "Escribe algo" << endl;
        cin >> noskipws >> texto;
    }
    while(texto != "a");
   
    cout << endl << "Has escrito la letra A";
}

Bien, si ingreso la letra "a", todo va de maravilla. En cambio, si ingreso cualquier otro caracter, o bien un espacio en blanco, se me crea un bucle mostrándome infinitamente "Escribe algo" en el programa :-S

¿Ayuda?
- Moderador de PHP


Desconectado gink

  • PHPer@ Fijo
  • ***
  • Mensajes: 146
  • Karma: 10
  • Sexo: Masculino
    • Ver Perfil
    • Mi blog personal
Re:[DUDA] Procesar string
« Respuesta #13 en: 21 de Noviembre de 2010, 04:47:21 am »
Vale, he utilizado el bucle DO... WHILE, pero se me crea un bucle infinito :-S, vean como lo he hecho:

Código: [Seleccionar]
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string texto;
   
    do
    {
        cout << "Escribe algo" << endl;
        cin >> noskipws >> texto;
    }
    while(texto != "a");
   
    cout << endl << "Has escrito la letra A";
}

Bien, si ingreso la letra "a", todo va de maravilla. En cambio, si ingreso cualquier otro caracter, o bien un espacio en blanco, se me crea un bucle mostrándome infinitamente "Escribe algo" en el programa :-S

¿Ayuda?
Utiliza el WHILE como te dije antes :)

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:[DUDA] Procesar string
« Respuesta #14 en: 21 de Noviembre de 2010, 10:06:55 am »
Vale, he utilizado el bucle DO... WHILE, pero se me crea un bucle infinito :-S, vean como lo he hecho:

Bien, si ingreso la letra "a", todo va de maravilla. En cambio, si ingreso cualquier otro caracter, o bien un espacio en blanco, se me crea un bucle mostrándome infinitamente "Escribe algo" en el programa :-S

¿Ayuda?

Tu has hecho el bucle MIENTRAS TEXTO SEA DISTINTO DE A, pero eso, como te ocurre, siempre que introduzcas una cosa distinta de A te volverá a pedir.
Tienes que hacer el bucle MIENTRAS TEXTO ESTÉ VACIO, lo que se consigue fácilmente con el método empty. Es decir, mientras que texto.empty() sea false, seguir con el bucle.
Solo tienes que cambiar la condición de tu do-while por esta otra:
do {
// TAL TAL
} while(!texto.empty());

Y listo!

Por cierto, en estos casos siempre es mejor usar do-while, de forma que siempre se ejecuta almenos una vez.
Fijate si es usual, que en la web C++ Reference, en la página sobre el método empty de la clase string, ponen de ejemplo de uso justo lo que tu quieres hacer con el bucle do-while.
Dale un vistazo que seguro que te ayuda.

http://www.cplusplus.com/reference/string/string/empty/

Saludos
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es