Count words in a given string

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++

filter_none

edit
close

play_arrow

link
brightness_4
code

/* 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

chevron_right


C

filter_none

edit
close

play_arrow

link
brightness_4
code

/* 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

/* 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?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
?>

chevron_right



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.



My Personal Notes arrow_drop_up

Improved By : chitranayal, rathbhupendra



Article Tags :
Practice Tags :


4


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.