Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: ramona98 en 19 Agosto 2013, 14:06 PM

Título: Error con el while
Publicado por: ramona98 en 19 Agosto 2013, 14:06 PM
Hola,
Estoy haciendo un programa que me calcule el numero de palabras en una cadena, lo he disenado calculando el numero de espacios y sumandole +1, el primer problema que puedo tener si tenemos dos espacios entre palabras ya no sera realista el calculo.... pero el pricipal problema es con el while me da error y no logro avanzar (he probado igualmente con for(...) y lo mismo.

#include <stdio.h>
#include <string.h>

int index, espacio;
char line[100];

int main()
{

strcpy(line,"hola sam, hola sam.");
index=0;

while (line[index] != '/0')
{
    if (line[index] == ' ') {
    ++espacio; }
    ++index;
}

   
   printf("%d palabras/n", espacio+1);


return (0);
}


y el error que da:

Compiling the source code....
$g++ main.cpp -o demo -lm -pthread -lgmpxx -lgmp -lreadline 2>&1
main.cpp:13:23: warning: multi-character character constant [-Wmultichar]
main.cpp:4:5: error: 'int index' redeclared as different kind of symbol
In file included from main.cpp:2:0:
/usr/include/string.h:471:22: error: previous declaration of 'const char* index(const char*, int)'
main.cpp: In function 'int main()':
main.cpp:11:7: error: overloaded function with no contextual type information
main.cpp:13:18: error: invalid types 'char [100][]' for array subscript
main.cpp:15:19: error: invalid types 'char [100][]' for array subscript
main.cpp:17:7: error: no pre-increment operator for type


Alguna ayuda?
Título: Re: Error con el while
Publicado por: Eternal Idol en 19 Agosto 2013, 15:03 PM
Ya que estas en C++ mejor inclui cstring y cstdio, si seguis teniendo problemas por redeclarar index cambiale el nombre a indice a tu variable ... segui vos.
Título: Re: Error con el while
Publicado por: Alien-Z en 19 Agosto 2013, 15:09 PM
Utiliza un puntero para iterar dentro de la cadena:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <string.h>

int main()
{
char cadena[] = "hola sam, hola sam.";
char *pCadena = cadena;
int numEspacios = 0;

while (*pCadena != '\0') {
if (*pCadena == ' ') numEspacios++;
pCadena++;
}

   printf("%d palabras/n", numEspacios+1);

   return 0;
}



Tu código tiene un error: En el caso de la cadena vacía (char cadena[] = "") el programa imprimirá numEspacios+1 palabras, es decir, 0+1 palabras lo cual está mal.

Por tu registro de errores puedo suponer que estás programando en C++: main.cpp: In function 'int main()': ... así que te recomiendo el tipo String para manejar cadenas.

Un saludo.
Título: Re: Error con el while
Publicado por: do-while en 19 Agosto 2013, 15:34 PM
El error no venia de ahí. El compilador le estaba diciendo que tenia una constante caracter que tenía mas de un caracter. Había puesto '/0' en lugar de '\0'

Y no llames a la variable index, te está diciendo que hay un conflicto con alguna función definida en string.h (Como ya había dicho Eternal)

¡Saludos!