Comunidad PHPeros

Lenguajes => C / C++ => Mensaje iniciado por: Warlox en 20 de Noviembre de 2010, 18:21:46 pm

Título: [DUDA] Procesar string
Publicado por: Warlox 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 ^^
Título: Re:[DUDA] Procesar string
Publicado por: Siquillote 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 ;)
Título: Re:[DUDA] Procesar string
Publicado por: gink 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).
Título: Re:[DUDA] Procesar string
Publicado por: Warlox 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?
Título: Re:[DUDA] Procesar string
Publicado por: Siquillote 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();
}
Título: Re:[DUDA] Procesar string
Publicado por: gink 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!
Título: Re:[DUDA] Procesar string
Publicado por: Farresito 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 :)
Título: Re:[DUDA] Procesar string
Publicado por: Siquillote 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 ;)
Título: Re:[DUDA] Procesar string
Publicado por: Farresito 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
Título: Re:[DUDA] Procesar string
Publicado por: CarlosRdrz 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!
Título: Re:[DUDA] Procesar string
Publicado por: Farresito 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
Título: Re:[DUDA] Procesar string
Publicado por: gink 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
Título: Re:[DUDA] Procesar string
Publicado por: Warlox 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?
Título: Re:[DUDA] Procesar string
Publicado por: gink 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 :)
Título: Re:[DUDA] Procesar string
Publicado por: CarlosRdrz 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
Título: Re:[DUDA] Procesar string
Publicado por: Warlox en 21 de Noviembre de 2010, 19:19:45 pm
Vale, muchas gracias a todos :P, al final lo he hecho así:

Código: [Seleccionar]
do
{
    posicionar(24,8);
    getline(cin, nombreScript);
}
while(nombreScript.empty());

Y me funciona de las mil maravillas ;)
¡Gracias!