📌  相关文章
📜  给定字符串的第K个以空格分隔的数字

📅  最后修改于: 2021-04-22 02:18:39             🧑  作者: Mango

给定一个由空格分隔的整数组成的字符串S ,任务是提取字符串存在的第K数字

注意:字符串中至少包含K个数字。

例子:

天真的方法:解决问题的最简单方法是遍历字符串并保留遇到的空格数。遇到K – 1个空格后,将数字打印到下一个空格作为所需答案。

下面是上述方法的实现:

C++
// C++ Program for the above approach
 
#include 
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


C++
// C++ program for the above approach
 
#include 
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


C++
// C++ program of the above approach
 
#include 
#include 
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


输出:
40
















时间复杂度: O(N),其中N是字符串的长度。
辅助空间: O(1)

Stringstream方法:想法是在C++中使用stringstream,它将字符串对象与流相关联,并允许我们从字符串进行读取,就好像它是一个流(如cin)一样。

下面是上述方法的实现:

C++

// C++ program for the above approach
 
#include 
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
输出
40















时间复杂度: O(N),其中N是字符串的长度。
辅助空间: O(1)

基于内置字符串函数的方法:想法是使用strtok()函数在键处提取字符串。使用c_str()函数来获取字符数组的字符指针参考。

下面是上述方法的实现:

C++

// C++ program of the above approach
 
#include 
#include 
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
输出
20 















时间复杂度: O(N),其中N是字符串的长度。
辅助空间: O(1)