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.
C++
/* C++ program to count no of words from given input string. */ #include <bits/stdc++.h> using namespace std; #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 code int main( void ) { char str[] = "One two three\n four\tfive " ; cout<< "No of words : " <<countWords(str); return 0; } // This is code is contributed by rathbhupendra |
C
/* C 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\tfive " ; printf ( "No of words : %u" , countWords(str)); return 0; } |
Java
/* Java program to count no of words from given input string. */ public class GFG { static final int OUT = 0 ; static final int IN = 1 ; // returns number of words in str static int countWords(String str) { int state = OUT; int wc = 0 ; // word count int i = 0 ; // Scan all characters one by one while (i < str.length()) { // If next character is a separator, set the // state as OUT if (str.charAt(i) == ' ' || str.charAt(i) == '\n' || str.charAt(i) == '\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 ++i; } return wc; } // Driver program to test above functions public static void main(String args[]) { String str = "One two three\n four\tfive " ; System.out.println( "No of words : " + countWords(str)); } } // This code is contributed by Sumit Ghosh |
Python3
# Python3 program to count words # in a given string OUT = 0 IN = 1 # Returns number of words in string def countWords(string): state = OUT wc = 0 # Scan all characters one by one for i in range ( len (string)): # If next character is a separator, # set the state as OUT if (string[i] = = ' ' or string[i] = = '\n' or string[i] = = '\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 elif state = = OUT: state = IN wc + = 1 # Return the number of words return wc # Driver Code string = "One two three\n four\tfive " print ( "No. of words : " + str (countWords(string))) # This code is contributed by BHAVYA JAIN |
C#
// C# program to count no of words // from given input string. using System; class GFG { static int OUT = 0; static int IN = 1; // returns number of words in str static int countWords(String str) { int state = OUT; int wc = 0; // word count int i = 0; // Scan all characters one // by one while (i < str.Length) { // If next character is a separator, // set the state as OUT if (str[i] == ' ' || str[i] == '\n' || str[i] == '\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 ++i; } return wc; } // Driver program to test above functions public static void Main() { String str = "One two three\n four\tfive " ; Console.WriteLine( "No of words : " + countWords(str)); } } // This code is contributed by Sam007. |
PHP
<?php // PHP program to count no of // words from given input string $OUT = 0; $IN = 1; // returns number of words in str function countWords( $str ) { global $OUT , $IN ; $state = $OUT ; $wc = 0; // word count $i = 0; // Scan all characters one by one while ( $i < strlen ( $str )) { // If next character is // a separator, set the // state as OUT if ( $str [ $i ] == " " || $str [ $i ] == "\n" || $str [ $i ] == "\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 ++ $i ; } return $wc ; } // Driver Code $str = "One two three\n four\tfive " ; echo "No of words : " . countWords( $str ); // This code is contributed // by ChitraNayal ?> |
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.
Method 2: using String.split() method
- Get the string to count the total number of words.
- Check if the string is empty or null then return 0.
- Use split() method of String class to split the string on whitespaces.
- The split() method breaks the given string around matches of the given regular expression and returns an array of string.
- The length of the array is the number of words in the given string.
- Now, print the result.
Below is the implementation of the above approach:
Java
// Java program to count total // number of words in the string class GFG { // Function to count total number // of words in the string public static int countWords(String str) { // Check if the string is null // or empty then return zero if (str == null || str.isEmpty()) return 0 ; // Splitting the string around // matches of the given regular // expression String[] words = str.split( "\\s+" ); // Return number of words // in the given string return words.length; } // Driver Code public static void main(String args[]) { // Given String str String str = "One two three\n four\tfive " ; // Print the result System.out.println( "No of words : " + countWords(str)); } } // This code is contributed by Prashant Srivastava |
No of words : 5
Time Complexity: O(N)
Method 3: using StringTokenizer.countTokens() method
- Get the string to count the total number of words.
- Check if the string is empty or null then return 0.
- Create a StringTokenizer with the given string passed as a parameter.
- Count the total number of words in the given string using the countTokens() method.
- Now, print the result.
Below is the implementation of the above approach:
Java
// Java program to count total // number of words in the string import java.util.StringTokenizer; class GFG { // Function to count total number // of words in the string public static int countWords(String str) { // Check if the string is null // or empty then return zero if (str == null || str.isEmpty()) return 0 ; // Create a StringTokenizer with the // given string passed as a parameter StringTokenizer tokens = new StringTokenizer(str); // Return the number of words // in the given string using // countTokens() method return tokens.countTokens(); } // Driver Code public static void main(String args[]) { // Given String str String str = "One two three\n four\tfive " ; // Print the result System.out.println( "No of words: " + countWords(str)); } } // This code is contributed by Prashant Srivastava |
No of words: 5
Time Complexity: O(N)
Method 4: using Character.isLetter() method
- Get the string to count the total number of words.
- Check if the string is empty or null then return 0.
- Converting the given string into a character array.
- Check if the character is a letter and index of the character array doesn’t equal to the end of the line that means, it is a word and set isWord by true.
- Check if the character is not a letter that means there is a space, then we increment the wordCount by one and set the isWord by false.
- Check for the last word of the sentence and increment the wordCount by one.
- Now, print the result.
Below is the implementation of the above approach:
Java
// Java program to count total // number of words in the string class GFG { // Function to count total number // of words in the string public static int countWords(String str) { // Check if the string is null // or empty then return zero if (str == null || str.isEmpty()) return 0 ; int wordCount = 0 ; boolean isWord = false ; int endOfLine = str.length() - 1 ; // Converting the given string // into a character array char [] ch = str.toCharArray(); for ( int i = 0 ; i < ch.length; i++) { // Check if the character is a letter // and index of character array doesn't // equal to end of line that means, it is // a word and set isWord by true if (Character.isLetter(ch[i]) && i != endOfLine) isWord = true ; // Check if the character is not a letter // that means there is a space, then we // increment the wordCount by one and set // the isWord by false else if (!Character.isLetter(ch[i]) && isWord) { wordCount++; isWord = false ; } // Check for the last word of the // sentence and increment the wordCount // by one else if (Character.isLetter(ch[i]) && i == endOfLine) wordCount++; } // Return the total number of // words in the string return wordCount; } // Driver Code public static void main(String args[]) { // Given String str String str = "One two three\n four\tfive " ; // Print the result System.out.println( "No of words : " + countWords(str)); } } // This code is contributed by Prashant Srivastava |
No of words : 5
Time Complexity: O(N)
Attention geek! Strengthen your foundations with the Python Programming Foundation Course and learn the basics.
To begin with, your interview preparations Enhance your Data Structures concepts with the Python DS Course.