Given a string, count number of words in it. The words are separated by following characters: space (‘ ‘) or new line (‘\n’) or tab (‘\t’) or a combination of these.
There can be many solutions to this problem. Following is a simple and interesting solution.
The idea is to maintain two states: IN and OUT. The state OUT indicates that a separator is seen. State IN indicates that a word character is seen. We increment word count when previous state is OUT and next character is a word character.
The idea is to maintain two states: IN and OUT. The state OUT indicates that a separator is seen. State IN indicates that a word character is seen. We increment word count when previous state is OUT and next character is a word character.
/* Program to count no of words from given input string. */ #include <stdio.h> #define OUT 0 #define IN 1 // returns number of words in str unsigned countWords( char *str) { int state = OUT; unsigned wc = 0; // word count // Scan all characters one by one while (*str) { // If next character is a separator, set the state as OUT if (*str == ' ' || *str == '\n' || *str == '\t' ) state = OUT; // If next character is not a word separator and state is OUT, // then set the state as IN and increment word count else if (state == OUT) { state = IN; ++wc; } // Move to next character ++str; } return wc; } // Driver program to tes above functions int main( void ) { char str[] = "One two three\n four\nfive " ; printf ( "No of words: %u\n" , countWords(str)); return 0; } |
Output:
No of words: 5
Time complexity: O(n)
This article is compiled by Narendra Kangralkar. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
No comments:
Post a Comment