Error con el while

Iniciado por ramona98, 19 Agosto 2013, 14:06 PM

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

ramona98

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?

Eternal Idol

#1
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.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Alien-Z

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.

do-while

#3
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!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!