C/Visual C - Función que cuente el número de palabras que se encuentra en una cadena de texto

 
Vista:
sin imagen de perfil
Val: 1
Ha disminuido su posición en 42 puestos en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Función que cuente el número de palabras que se encuentra en una cadena de texto

Publicado por Ismael (1 intervención) el 06/01/2020 13:51:32
Muy buenas, me llamo Ismael, y llevo muy poco tiempo medio programando en C en la asignatura de informática y y me han pedido una trabajo opcional y puntúa con nota si lo entregas y el último apartado no sé cómo hacerlo.Llevo ya varias horas intentando sacarlo, pero no comprendo como crear el código y me queda hasta el sábado 11, es decir en 5 días para la entrega y no quiero dejarlo sin hacer y además estoy interesado por mi mismo por como sería el código.

Si alguien domina bien el tema, Me harían un gran favor si me pueden decir cómo sería el código para esta función.

Mi idea sobre el código es que aunque la cadena sea de x por ejemplo [50] tamaño, pero si la cadena es menor que directamente solo recorra lo que realmente tiene la cadena que introducimos, y que empiece de 0 y vaya recorriendo el array uno uno con lo de la librería de string.h y cuando encuentre alguna carácter que no sea ningún signo de puntuación, entonces ahí es donde empieza la palabra y cuando encuentre un signo de puntuación incluido el espacio, acabe la palabra y ya tendría una palabra, y así sucesivamente hasta termine de evaluar toda la cadena, así mas o menos pienso qué es, pero no tengo ni idea de como crear el código.

El profesor me ha dicho que el código tiene que tener estas pautas:

La función tiene que tener como prototipo:

short numeroPalabras(const char*s);

y devuelve un valor entero igual al número de palabras.
consideramos una palabra una secuencia de uno o más caracteres alfanuméricos. No importa que estén separados por signos de puntuación, o por espacios. Por ejemplo, todas las cadenas mostradas a continuación tienen tres palabras: ---> se muestra en la imagen.

Muchas gracias,
Ismael
Captura-de-pantalla-2020-01-06-a-las-13.34.53
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

Función que cuente el número de palabras que se encuentra en una cadena de texto

Publicado por Israel Luengo Garcia a.k.a Snaked of Polygon (6 intervenciones) el 08/01/2020 11:27:32
Basandome en otro foro donde Vosk y Guzzano desarrollaron la funcion aqui te dejo el codigo

CODIGO C++ Builder 10.3 (Rad Studio Modo Consola)

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#pragma hdrstop
#pragma argsused
 
#ifdef _WIN32
#include <tchar.h>
#else
  typedef char _TCHAR;
  #define _tmain main
#endif
 
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
 
 
int contar_vocales(char *);
char chrmatch(char *lista, char ch);
 
 
int _tmain(int argc, _TCHAR* argv[])
{
 
char cad[500],*p;
int longi,i,x,P,R,V,longinP,len,NumeroAleatorio;
int porc=0;
 
printf("Ingrese un texto: ");
gets(cad);
longi = strlen(cad);
 
 
//-------------------------------Contador palabras------------------------------
	char ch;
	int q, w, soff, eoff, colisiones, falsos_positivos;
	char tokens[] = " ',.;:-_!?¿¡(){}[]|@#~%&/\\";
 
	soff = eoff = 0;
	colisiones = 0;
	falsos_positivos = 0;
	if(strlen(cad)) {
		for(q = 0; q <= strlen(cad); q++) {
			ch = (q == strlen(cad))? tokens[0]:cad[q];
			if(chrmatch(tokens, ch)) {
				eoff = q;
				if(soff < eoff) {
					colisiones++;
					printf("[");
					for(w = soff; w < eoff; w++) {
						printf("%c", cad[w]);
					}
					printf("]");
				}
				else {
					falsos_positivos++;
				}
				soff = eoff+1;
			}
		}
	}
 
	textattr(15);
	cprintf("\n\n\rCreo que hay %d palabras y %d falsos positivos\n", colisiones, falsos_positivos);
 
 
//--------------------------------Porcentaje------------------------------------
 
printf("\nCantidad de Vocales: %d",contar_vocales(cad));
V = contar_vocales(cad);
printf("\nCantidad de caracteres: %d",longi-P);
longinP= longi-P;
porc= (V*100)/longinP;
printf("\nPorcentaje de vocales: %d Por ciento",porc);
 
//---------------------------------- Al reves-----------------------------------
len = strlen(cad);
printf("\nTexto al reves: ");
i=0;
for(i=len;i>=0;i--){
	 printf("%c",cad[i]);
 }
printf("\n");
 
//--------------------------------------Piso------------------------------------
p=cad;
while(*p!='\0'){
	if(*p==' ')
		*p='_';
		 p++;
	}
	printf( "Con piso: %s \n",cad);
 
getch();
 
	return 0;
}
 
 
 
//--------------------------------Funcion---------------------------------------
 
int contar_vocales(char *cad){
 
int cont=0;
char *aux=cad;
 
while(*aux){
   if(*aux=='a'||*aux=='e'||*aux=='i'||*aux=='o'||*aux=='u')
     cont++;
       aux++;
   }//funcion
 
return cont;
 
}//contar_vocales
 
char chrmatch(char *lista, char ch) {
    int q;
    for(q = 0; q < strlen(lista); q++) {
        if(lista[q] == ch) {
            return 1;
        }
    }
    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