Skip to content
Related Articles

Related Articles

Improve Article

Kth space-separated number from a given string

  • Difficulty Level : Medium
  • Last Updated : 09 Nov, 2020

Given a string S consisting of space-separated integers, the task is to extract the Kth number present in the string.

Note: The string contains at least K numbers in it.

Examples:

Input: S = “12 13 15”, K= 3
Output: 15
Explanation: The 3rd integer in the above string is 15.

Input: S = “10 20 30 40”, K = 2
Output: 20
Explanation: The 2nd integer in the above string is 20.

Naive Approach: The simplest approach to solve the problem is to traverse the string and keep a count of spaces encountered. Once, K – 1 spaces are encountered, print the number up to the next space as the required answer.



Below is the implementation of the above approach:

C++




// C++ Program for the above approach
 
#include <iostream>
using namespace std;
 
// Function to print kth integer
// in a given string
void print_kth_string(string s, int K)
{
    // Size of the string
    int N = s.length();
 
    // Pointer for iteration
    int i;
    for (i = 0; i < N; i++) {
        // If space char found
        // decrement K
        if (s[i] == ' ')
            K--;
 
        // If K becomes 1, the next
        // string is the required one
        if (K == 1)
            break;
    }
 
    // Print the required number
    while (i++ < N && s[i] != ' ')
        cout << s[i];
}
 
// Driver Code
int main()
{
    // Given string
    string s("10 20 30 40");
 
    // Given K
    int K = 4;
 
    // Function call
    print_kth_string(s, K);
}

Java




// Java program for the above approach
import java.io.*;
 
class GFG{
  
// Function to print kth integer
// in a given string
static void print_kth_string(String s, int K)
{
     
    // Size of the string
    int N = s.length();
  
    // Pointer for iteration
    int i;
     
    for(i = 0; i < N; i++)
    {
         
        // If space char found
        // decrement K
        if (s.charAt(i) == ' ')
            K--;
  
        // If K becomes 1, the next
        // string is the required one
        if (K == 1)
            break;
    }
  
    // Print the required number
    while (i++ < N - 1 && s.charAt(i) != ' ')
        System.out.print(s.charAt(i));
}
  
// Driver Code
public static void main (String[] args)
{
     
    // Given string
    String s = "10 20 30 40";
  
    // Given K
    int K = 4;
  
    // Function call
    print_kth_string(s, K);
}
}
 
// This code is contributed by sanjoy_62

Python3




# Python3 program for
# the above approach
 
# Function to prkth integer
# in a given string
def print_kth_string(s, K):
   
    # Size of the string
    N = len(s);
 
    for i in range(0, N, 1):
 
        # If space char found
        # decrement K
        if (s[i] == ' '):
            K -= 1;
 
        # If K becomes 1, the next
        # string is the required one
        if (K == 1):
            break;
 
    # Print required number
    while (i < N):
        if(s[i] != ' '):
            print(s[i], end = "");
        i += 1;
 
# Driver Code
if __name__ == '__main__':
   
    # Given string
    s = "10 20 30 40";
 
    # Given K
    K = 4;
 
    # Function call
    print_kth_string(s, K);
 
# This code is contributed by Rajput-Ji

C#




// C# program for the above approach 
using System;
 
class GFG{
  
// Function to print kth integer
// in a given string
static void print_kth_string(string s, int K)
{
     
    // Size of the string
    int N = s.Length;
  
    // Pointer for iteration
    int i;
     
    for(i = 0; i < N; i++)
    {
         
        // If space char found
        // decrement K
        if (s[i] == ' ')
            K--;
  
        // If K becomes 1, the next
        // string is the required one
        if (K == 1)
            break;
    }
  
    // Print the required number
    while (i++ < N - 1 && s[i] != ' ')
        Console.Write(s[i]);
}
  
// Driver Code
public static void Main ()
{
     
    // Given string
    string s = "10 20 30 40";
  
    // Given K
    int K = 4;
  
    // Function call
    print_kth_string(s, K);
}
}
 
// This code is contributed by sanjoy_62
Output: 
40
















 

Time Complexity: O(N), where N is the length of the string.
Auxiliary Space: O(1)

Stringstream Approach: The idea is to use stringstream in C++ which associates a string object with a stream and allowing us to read from the string as if it were a stream (like cin). 

Below is the implementation of the above approach: 

C++




// C++ program for the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to print Kth integer
// from a given string
void print_kth_string(string str, int K)
{
    // Split input into words
    // using stringstream
    stringstream iss(str);
 
    // Stores individual words
    string kth;
 
    // Extract words from stream
    while (iss >> kth && K) {
        K--;
 
        // If kth position
        // is reached
        if (K == 0) {
            cout << kth;
            break;
        }
    }
}
 
// Driver Code
int main()
{
    // Given string
    string s("10 20 30 40");
 
    // Given K
    int K = 4;
 
    // Function call
    print_kth_string(s, K);
}

Java




// Java program for
// the above approach
import java.util.*;
class GFG{
 
// Function to print Kth integer
// from a given String
static void print_kth_String(String str,
                             int K)
{
  // Split input into words
  // using spilt
  String[] iss = str.split(" ");
  K--;
   
  System.out.print(iss[K]);
}
 
// Driver Code
public static void main(String[] args)
{
  // Given String
  String s = ("10 20 30 40");
 
  // Given K
  int K = 4;
 
  // Function call
  print_kth_String(s, K);
}
}
 
// This code is contributed by Rajput-Ji

Python3




# Python3 program for the above approach
 
# Function to print Kth integer
# from a given string
def print_kth_string(str1, K):
     
    # Split input into words
    # using stringstream
    st = str1.split(" ")
 
    # Stores individual words
    print(st[K - 1])
 
# Driver Code
if __name__ == '__main__':
     
    # Given string
    s = "10 20 30 40"
 
    # Given K
    K = 4
 
    # Function call
    print_kth_string(s, K)
 
# This code is contributed by SURENDRA_GANGWAR

C#




// C# program for
// the above approach
using System;
class GFG{
 
// Function to print Kth integer
// from a given String
static void print_kth_String(String str,
                             int K)
{
  // Split input into words
  // using spilt
  String[] iss = str.Split(' ');
   
  K--; 
  Console.Write(iss[K]);
}
 
// Driver Code
public static void Main(String[] args)
{
  // Given String
  String s = ("10 20 30 40");
 
  // Given K
  int K = 4;
 
  // Function call
  print_kth_String(s, K);
}
}
 
// This code is contributed by Rajput-Ji
Output
40















Time Complexity: O(N), where N is the length of the string.
Auxiliary Space: O(1)

Built-in String Functions based Approach: The idea is to use strtok() function to extract the string at the key. Use c_str() function to get the char pointer reference of an array of the characters.

Below is the implementation of the above approach:

C++




// C++ program of the above approach
 
#include <cstring>
#include <iostream>
using namespace std;
 
// Function to extract integer at key
// position in the given string
void print_kth_string(string str, int K)
{
    // strtok(): Extracts the number at key
    // c_str(): Type cast string to char*
    char* s = strtok((char*)str.c_str(),
                     " ");
 
    while (K > 1) {
        // Get the token at position -> key
        s = strtok(NULL, " ");
        K--;
    }
 
    // Print the kth integer
    cout << string(s) << " ";
}
 
// Driver Code
int main()
{
    // Given string
    string s("10 20 30 40");
 
    // Given K
    int K = 2;
 
    // Function call
    print_kth_string(s, K);
 
    return 0;
}

Java




// Java program of the
// above approach
import java.util.*;
class GFG{
 
// Function to extract integer
// at key position in the given String
static void print_kth_String(String str,
                             int K)
{
  // StringTokenizer(): Extracts
  // the number at key
  // c_str(): Type cast
  // String to char*
  StringTokenizer st =
        new StringTokenizer(str);
  int count = 1;
   
  while (st.hasMoreTokens() && K > 0 )
  {
    if(count == K)
      System.out.println(st.nextToken());
    count++;
    st.nextToken();
  }
}
 
// Driver Code
public static void main(String[] args)
{
  // Given String
  String s = ("10 20 30 40");
 
  // Given K
  int K = 2;
 
  // Function call
  print_kth_String(s, K);
}
}
 
// This code is contributed by 29AjayKumar

C#




// C# program of the
// above approach
using System;
class GFG{
 
// Function to extract integer
// at key position in the given String
static void print_kth_String(String str,
                             int K)
{
  // StringTokenizer(): Extracts
  // the number at key
  // c_str(): Type cast
  // String to char*
  String[] iss = str.Split(' ');
   
  K--; 
  Console.Write(iss[K]);
}
 
// Driver Code
public static void Main(String[] args)
{
  // Given String
  String s = ("10 20 30 40");
 
  // Given K
  int K = 2;
 
  // Function call
  print_kth_String(s, K);
}
}
 
// This code is contributed by Rajput-Ji
Output
20 















Time Complexity: O(N), where N is the length of the string.
Auxiliary Space: O(1)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :