contador de palabras (ayuda con el error)

Iniciado por creiko, 2 Septiembre 2016, 22:47 PM

0 Miembros y 1 Visitante están viendo este tema.

creiko

Ayuda en esta parte
debo hacer un programa en dev c++
que me cambie las letras de mayúsculas a minusculas
y que me cuente las palabras digitadas
ejemplo
No haBra NadA que Te puEda aSUStaR
deberia quedarme asi
no habra nada que te pueda asustar
contiene 7 palabras
ya tengo la primera parte de mayúscula a minúscula

Código (cpp) [Seleccionar]

#include "conio.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "windows.h"
#include "iostream"
#include "time.h"
using namespace std;
void minusculas(char a[]);
int main (int argc, char** argv)
{
char p[50];
cout<<"escriba una cadena"<<endl;
gets(p);
minusculas(p);
puts(p);
return 0;
}
void minusculas(char a[])
{
int i=0;
for(i=0;a[i]!='\0';i++)
{
if(a[i]>='A'&&a[i]<='Z')
{
a[i]=a[i]+32;
}
}
}


pero no logro hacer el contador de palabras
tengo esto otro código pero me marca un error en los espacios

Código (cpp) [Seleccionar]


#include "conio.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "windows.h"
#include "iostream"
#include "time.h"

using namespace std;
int palabras(char a[]);
using namespace std;
void minusculas(char a[]);
int main (int argc, char** argv)
{
char p[50];
cout<<"escriba una cadena"<<endl;
gets(p);
minusculas(p);
puts(p);

return 0;
}

int palabras(char a[])
{
int i, cont=0;
bool pal=false;


for(i=0;a[i]!='\0';i++)
{
if ((pal==false&&(a[i]>='A'&&a[i]<='Z')||(a[i]>='a'&&a[i]<='z')))
{
cont ++;
pal=true;
}
else
{
if(a[i]==" ") // aqui el error
pal=true;
}
}
return(cont);
}




si alguien me explica como hacerlo le agredeceria

AlbertoBSD

Cuando se trata de comparacion entre caracteres solo se ponen comillas simples

if(a[i]==' ') // aqui el error
pal=true;
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

creiko

gracias por la ayuda ya soluciones esa parte
pero al compilarlo no marca ningún error
pero me sale esto

L:\Estructura de datos\collect2.exe   [Error] ld returned 1 exit status

JonaLamper

#3
Lo que necesitas es la función tolower. Mira, se puede hacer más sencillo así:

Código (cpp) [Seleccionar]
#include <iostream>
#include <string>
using namespace std;
// ------------------------------------------------------------------------
// Complejidad: O(N), donde N es el número de caracteres que tiene la frase
int main(){
string entrada, salida;
int contador = 0, indice = 0;

cout << "Introduce una frase: " << endl;
getline(cin, entrada); // Leemos la línea entera
entrada += " \n"; // Ponemos un salto de línea al final

while (entrada[indice] != '\n'){ // Mientras no lleguemos al final de línea...
if (entrada[indice] == ' ') // Si encontramos un espacio es que una palabra ha terminado
contador++; // Incrementamos el número de palabras
salida += tolower(entrada[indice]); // Pasamos (si hubiese) mayuscula a minuscula
indice++;  // Y continuamos recorriendo la frase
}

cout << "Frase en minuscula: " << salida << endl;
cout << "Palabras totales: " << contador << endl;

system("PAUSE");
return 0;
}


La función tolower te convierte las mayúsculas a minúsculas directamente.

Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.