Dev - C++ - Saber cuantas palabras hay en un string o cadena

 
Vista:
Imágen de perfil de Francisco
Val: 55
Ha aumentado 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Saber cuantas palabras hay en un string o cadena

Publicado por Francisco (36 intervenciones) el 05/02/2018 03:11:44
Hola, ¿Como estan?, les mando mi aporte de un programa que es contar cuantas palabras hay en una cadena que ingresa el usuario.
Se que no lo hice bien, seria muy importante que me dijeran cual es el error y que por favor me lo manden corregido sin usar funciones internas como .txt u otras.
Aqui va el codigo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
using namespace std;
int main(){
    string mars=" ";
    int c=0;
    cout<<"ingrese cadena "<<endl;
    getline(cin >> ws,mars);
    for(int i=0;i<mars.length();i++){
        if((mars[i]!=' ' && mars[i+1]!=' ')){
            c=c+1;
        }
    }
    cout<< "hay "<<c<<" palabras "<<endl;
    return 0;
}

Espero una respuesta de su parte. Atte.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 338
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Saber cuantas palabras hay en un string o cadena

Publicado por Martín (158 intervenciones) el 05/02/2018 04:48:15
Creo que puedes modificar la prueba de condición, para que se vayan contando los espacios entre palabras. Al final, la cantidad de palabras en la cadena será igual a la cantidad de espacios más uno.
Supón que la cadena es "esta es una cadena de siete palabras". Como tiene 6 espacios se puede decir que está formada por siete palabras.

Hay otros casos, como cuando la oración (la cadena) tiene un salto de línea en lugar de un espacio, o también cuando la oración tiene signos de puntuación como la coma, el punto y coma o el punto. Pero como para empezar esta es un ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
#include <string>
using namespace std;
int main()
{
    string mars = " ";
    int c = 0;
    cout << "ingrese cadena " << endl;
 
    getline(cin >> ws, mars);
 
    for (int i = 0; i < mars.length(); i++) {
        if ((mars[i] == ' ' && mars[i + 1] != ' ')) {
            c = c + 1;
        }
    }
    cout << "hay " << c+1 << " palabras " << endl;
    return 0;
}
// Clases particulares --> enviar mensaje privado...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Francisco
Val: 55
Ha aumentado 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Saber cuantas palabras hay en un string o cadena

Publicado por Francisco (36 intervenciones) el 05/02/2018 04:56:07
Muchas gracias. Claro... Es un truco en la salida.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Saber cuantas palabras hay en un string o cadena

Publicado por harol (31 intervenciones) el 05/02/2018 05:06:16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//espero te ayude
#include <iostream>
#include <stdlib.h>
using namespace std;
int main(){
 
	string palabra =" ";
	int cont_palabra  = 0;
 
	cout<<"Ingrese una frase o palabra: ";getline(cin,palabra);
	for(int i=0; i<palabra.size(); i++){
		if(palabra[i+1] == ' ' || palabra[i+1] == '\0'){
			cont_palabra++;
		}
	}
 
	cout<<"La cantidad de palabras es: "<<cont_palabra;
 
	system("PAUSE>NULL");
	return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar
sin imagen de perfil
Val: 661
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Saber cuantas palabras hay en un string o cadena

Publicado por agustin (522 intervenciones) el 05/02/2018 11:13:46
Esto está mal:
1
2
for (int i = 0; i < mars.length(); i++) {
    if ((mars[i] == ' ' && mars[i + 1] != ' '))
i+1 desbordara el buffer al comprobar el último carácter del string.
No lo puedo probar pero lo dejaría así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <ctype.h>
 
using namespace std;
 
int main()
{
    string palabra;
    int n_chars=0, cont_palabra = 0;
 
    cout<<"Ingrese una frase o palabra: ";
    getline(cin,palabra);
    for(int i=0; i<strlen(palabra); i++){
        if(!isalpha(palabra[i])){
        	if(n_chars > 0){
                cont_palabra++;
                n_chars=0;
        	}
        }else{
        	n_chars++;
        }
    }
    cout<<"La cantidad de palabras es: "<<cont_palabra;
    cin.get();
    return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Saber cuantas palabras hay en un string o cadena

Publicado por harol (31 intervenciones) el 05/02/2018 16:06:16
yo también e usado el [i+1] y no e tenido problemas , porque no entraría completo al if , el último "i", ya que este espacio sería un caracter, aunque podría ocurrir que el usuaario de casualidad al terminar la frase ingrese un espacio más ,todo caso se podría usar esto :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*este programa sería en caso el usuario dentro de la frase aprete más de una vez la barra de espacio y al terminar la frase también de casualidad aprete la barra de espacio */
#include <iostream>
#include <stdlib.h>
using namespace std;
int main(){
 
string palabra =" ";
int cont_palabra = 0;
 
cout<<"Ingrese una frase o palabra: ";getline(cin,palabra);
for(int i=0; i<palabra.size(); i++){
	if(i!=palabra.size()-1){
		if(palabra[i] == ' ' && palabra[i+1] != ' '){
			cont_palabra++;
		}
	}
}
 
cout<<"La cantidad de palabras es: "<<cont_palabra+1;
 
system("PAUSE>NULL");
return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 661
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Saber cuantas palabras hay en un string o cadena

Publicado por agustin (522 intervenciones) el 05/02/2018 22:08:47
Aquí tienes un fallo:
1
if(i!=palabra.size()-1){
Si introduces como cadena "a" por ejemplo, no recobrará esa palabra y te dirá que hay 0 porque palabra.size()-1 sería 0 y no se cumpliría la condición.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Saber cuantas palabras hay en un string o cadena

Publicado por harol (31 intervenciones) el 05/02/2018 22:58:49
es por eso que en la salida pongo:
cout<<"La cantidad de palabras es: "<<cont_palabra+1;
eso permite que si me reconcosca el "a" y el programa me dirá que tendra 1 palabra
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar