yo lo haría con artimetica de punteros (si ya lo has visto), así te podría andar tanto en C como en C++No. Las cadenas podrían ser de la clase estándar string de C++.
Cita de: "herzdark"yo lo haría con artimetica de punteros (si ya lo has visto), así te podría andar tanto en C como en C++No. Las cadenas podrían ser de la clase estándar string de C++.
Aparte ¿la cadena en qué formato es? ASCII, Unicode, etc...
tenes razón pero como yo vengo de C a C++ no utilizo la clase estándar stringYo vengo de C también, eso no es una razón. Si es en C++ lo que quiere hacer, es muchísimo mejor utilizar la clase string. Si es C, entonces no habrá más remedio que char*.
son gustos de programaciónNo estoy de acuerdo. Una cosa son gustos, y otra paradigmas de programación. Si vas a usar C++ y POO, entonces hazlo todo con clases y siguiendo el paradigma de POO (encapsulación, etc...). Si no, mejor usa C a secas.
cual sería la diferencia si es ASCII o Unicode?ASCII es un byte mientras que Unicode son 2.
Código: C++
long palab(char *c) {int cont=0; for(int i=0;i<200;i++) {if(c[i]==' '||c[i]==' ') cont ++; if(c[i]==' ') i=200; } return cont; }
Retiro lo dicho.que paso moskito???, lo estuve pensando mucho y la clase estandar string es en verdad un char * encubierto
que paso moskito???Nada, en realidad borré lo que había escrito en ese post, no me refiero a lo anterior. Sigo manteniendo mi opinión de que string es mucho mejor que char*.
lo estuve pensando mucho y la clase estandar string es en verdad un char * encubiertoParecido, pero mucho más avanzado de lo que crees. Con char* tienes que reservar el espacio tú mismo, cuando la clase string se encarga de todo eso por ti. Prueba en el ejemplo de tu profesor a introducir una cadena de 100 caracteres, a ver qué pasa. Si se ha creado la clase string en C++, es por algo. Y desde luego el ejemplo de tu profesor es una mezcla absurda entre C y C++. Y no es el único que hace semejantes desvaríos. Es algo típico de la gente que programa en C++ viniendo de C.
Sigo manteniendo mi opinión de que string es mucho mejor que char*.
Sigo sin entender para qué quieres pasarlo a la función como char* usando c_str() si con string te vale igual. Es marear la perdiz por no querer aprender la clase estándar string, simple y llanamente.
no se si estoy diciendo burradas pero al utilizar el puntero a cadenas lo puede entender un recién empezado en C++ digo las personas q todavía no aprendío o vio la clase string, pero si vos le das el ejercicio con la clase string a uno q todavía no estudio esto es como japones no lo va a entender.
por que detesto reservar y liberar memoria en C todo el tiempo hasta para una simple cadenaCon char* también estás reservando y liberando memoria.
Pero si tengo chance de tomar lo mejor de c++ y c, pues lo hago.Mezclar C y C++ para un ejemplo pequeño no hay problema. Mezcla C y C++ en un proyecto grande y luego venid llorando.
Con char* también estás reservando y liberando memoria.
Mezclar C y C++ para un ejemplo pequeño no hay problema. Mezcla C y C++ en un proyecto grande y luego venid llorando.
Pero mezclar C con C++ nunca ha sido problema. :mellow:+1
#include <stdio.h>
int contarPalabras(const char* cadena)
{
int cambios = 1;
int anteriorEsEspacio = 1;
int actualEsEspacio;
if (0 == cadena) return 0;
while (*cadena)
{
actualEsEspacio = isspace(*cadena) != 0;
cambios += actualEsEspacio ^ anteriorEsEspacio;
anteriorEsEspacio = actualEsEspacio;
cadena++;
}
return cambios / 2;
}
void imprimirPalabras(const char* cadena)
{
printf("%s\nPalabras: %d\n\n", cadena, contarPalabras(cadena));
}
int main()
{
imprimirPalabras("");
imprimirPalabras(" ");
imprimirPalabras("una");
imprimirPalabras(" una");
imprimirPalabras("una ");
imprimirPalabras(" una ");
imprimirPalabras(" dos palabras ");
imprimirPalabras("dos palabras");
imprimirPalabras(" Varias palabras separadas por uno o varios espacios");
imprimirPalabras("Varias \n Palabras\n en \n varias \nlineas");
}
Acabo de arreglar el fallo en el ejemplo que puse para C++.
Esta es otra forma de contar palabras, esta vez para C.
Básicamente cuenta las transiciones entre palabras y secuencias de espacios en blanco:
main.cCódigo: [Seleccionar]#include <stdio.h>
int contarPalabras(const char* cadena)
{
int cambios = 1;
int anteriorEsEspacio = 1;
int actualEsEspacio;
if (0 == cadena) return 0;
while (*cadena)
{
actualEsEspacio = isspace(*cadena) != 0;
cambios += actualEsEspacio ^ anteriorEsEspacio;
anteriorEsEspacio = actualEsEspacio;
cadena++;
}
return cambios / 2;
}
void imprimirPalabras(const char* cadena)
{
printf("%s\nPalabras: %d\n\n", cadena, contarPalabras(cadena));
}
int main()
{
imprimirPalabras("");
imprimirPalabras(" ");
imprimirPalabras("una");
imprimirPalabras(" una");
imprimirPalabras("una ");
imprimirPalabras(" una ");
imprimirPalabras(" dos palabras ");
imprimirPalabras("dos palabras");
imprimirPalabras(" Varias palabras separadas por uno o varios espacios");
imprimirPalabras("Varias \n Palabras\n en \n varias \nlineas");
}
#include <stdio.h>
char a[100];
int Calcular_Palabras ()
{
int palabras=1,contador=0;
while(a[contador] != '\0') {
if(a[contador] == ' ')
palabras++;
contador++;
}
return palabras;
}
int main (void)
{
while (1) {
printf("\n\tIngrese una cadena: ");
gets(a);
printf("\n\tEl numero de palabras es: %i\n\n",Calcular_Palabras());
}
return 0;
}
No me gusta revivir temas, pero tengo una duda, y no me gusta quedarme con dudas, y es que soy alumno de primer año
y con suerte lo mas dificil que me han pasado es arreglos y funciones en c y no entiendo ni mitad de sus codigos, pero igual pude hacer un programa que cuenta palabrasCódigo: [Seleccionar]#include <stdio.h>
char a[100];
int Calcular_Palabras ()
{
int palabras=1,contador=0;
while(a[contador] != '\0')
{if(a[contador] == ' ')
palabras++;
contador++;
}
return palabras;
}
int main (void)
{
while (1) {
printf("\n\tIngrese una cadena: ");
gets(a);
printf("\n\tEl numero de palabras es: %i\n\n",Calcular_Palabras());
}
return 0;
}
entonces no entiendo por que ustedes lo hacen tan dificil y con tantas cosas... o sere yo xD