File: extract.c

package info (click to toggle)
ucbmpeg 1r2-6
  • links: PTS
  • area: non-free
  • in suites: hamm, potato, slink
  • size: 9,504 kB
  • ctags: 7,643
  • sloc: ansic: 79,920; tcl: 2,985; perl: 313; asm: 284; makefile: 269; csh: 13
file content (75 lines) | stat: -rw-r--r-- 1,325 bytes parent folder | download | duplicates (2)
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
#include <stdio.h>


char **ExtractWords(char *sentence, int *numWords);
char *FirstWord(char **sentPtr);
int CountWords(char *sentence);


char **ExtractWords(char *sentence, int *numWords)
{
    char **result;
    register int index;

    (*numWords) = CountWords(sentence);
    result = (char **) malloc((*numWords)*sizeof(char *));

    for ( index = 0; index < (*numWords); index++ )
	result[index] = FirstWord(&sentence);

    return result;
}


char *FirstWord(char **sentPtr)
{
    char *start, *end, *result, *ptr;

    /* skip spaces */

    while ( **sentPtr == ' ' )
	(*sentPtr)++;

    /* find start and end of first word */
    start = *sentPtr;
    end = start;
    while ( (**sentPtr != ' ') && (**sentPtr != '\0') )
    {
	(*sentPtr)++;
	end++;
    }

    /* allocate space and copy characters to new string */
    result = (char *) malloc(sizeof(char)*(1+(end-start)/sizeof(char)));
    ptr = result;
    while ( start != end )
    {
	*ptr = *start;
	ptr++;
	start++;
    }
    *ptr = '\0';

    return result;
}


int CountWords(char *sentence)
{
    int numWords = 0;

    while ( *sentence != '\0' )
    {
	while ( *sentence == ' ' )
	    sentence++;

	if ( *sentence == '\0' )
	    break;

	numWords++;
	while ( (*sentence != ' ') && (*sentence != '\0') )
	    sentence++;
    }

    return numWords;
}