包含给定字符串中每个单词的首字母的字符串

2021年3月26日15:56:30 发表评论 880 次浏览

本文概述

一个弦str包含小写英文字母和空格。它可能包含多个空格。获取每个单词的第一个字母, 并将结果作为字符串返回。结果不应包含任何空格。

例子:

Input : str = "geeks for geeks"
Output : gfg

Input : str = "happy   coding"
Output : hc

这个想法是遍历字符串str的每个字符并维护一个布尔变量, 该变量最初设置为true。每当遇到空间时, 我们都会将布尔变量设置为true。如果遇到除空格以外的其他任何字符, 我们将检查布尔变量, 如果将其设置为true, 则将该宪章复制到输出字符串中, 并将布尔变量设置为false。如果布尔变量设置为false, 则不执行任何操作。

算法

1. Traverse string str. And initialize a variable v as true.
2. If str[i] == ' '. Set v as true.
3. If str[i] != ' '. Check if v is true or not.
   a) If true, copy str[i] to output string and set v as false.
   b) If false, do nothing.

C ++

// C++ program to find the string which contain
// the first character of each word of another
// string.
#include<bits/stdc++.h>
using namespace std;
  
// Function to find string which has first
// character of each word.
string firstLetterWord(string str)
{
     string result = "" ;
  
     // Traverse the string.
     bool v = true ;
     for ( int i=0; i<str.length(); i++)
     {
         // If it is space, set v as true.
         if (str[i] == ' ' )
             v = true ;
  
         // Else check if v is true or not.
         // If true, copy character in output
         // string and set v as false.
         else if (str[i] != ' ' && v == true )
         {
             result.push_back(str[i]);
             v = false ;
         }
     }
  
     return result;
}
  
// Driver cpde
int main()
{
     string str = "geeks for geeks" ;
     cout << firstLetterWord(str);
     return 0;
}

Java

// Java program to find the string which 
// contain the first character of each word  
// of another string. 
  
class GFG 
{
      
     // Function to find string which has first 
     // character of each word. 
     static String firstLetterWord(String str) 
     {
         String result = "" ;
  
         // Traverse the string. 
         boolean v = true ;
         for ( int i = 0 ; i < str.length(); i++) 
         {
             // If it is space, set v as true. 
             if (str.charAt(i) == ' ' ) 
             {
                 v = true ;
             } 
              
             // Else check if v is true or not. 
             // If true, copy character in output 
             // string and set v as false. 
             else if (str.charAt(i) != ' ' && v == true ) 
             {
                 result += (str.charAt(i));
                 v = false ;
             }
         }
  
         return result;
     }
  
     // Driver code 
     public static void main(String[] args) 
     {
         String str = "geeks for geeks" ;
         System.out.println(firstLetterWord(str));
     }
}
  
// This code is contributed by 
// 29AjayKumar

Python 3

# Python 3 program to find the string which 
# contain the first character of each word 
# of another string.
  
# Function to find string which has first
# character of each word.
def firstLetterWord( str ):
  
     result = ""
  
     # Traverse the string.
     v = True
     for i in range ( len ( str )):
          
         # If it is space, set v as true.
         if ( str [i] = = ' ' ):
             v = True
  
         # Else check if v is true or not.
         # If true, copy character in output
         # string and set v as false.
         elif ( str [i] ! = ' ' and v = = True ):
             result + = ( str [i])
             v = False
  
     return result
  
# Driver Code
if __name__ = = "__main__" :
      
     str = "geeks for geeks"
     print (firstLetterWord( str ))
  
# This code is contributed by ita_c

C#

// C# program to find the string which 
// contain the first character of each word 
// of another string. 
using System;
  
class GFG 
{ 
      
     // Function to find string which has first 
     // character of each word. 
     static String firstLetterWord(String str) 
     { 
         String result = "" ; 
  
         // Traverse the string. 
         bool v = true ; 
         for ( int i = 0; i < str.Length; i++) 
         { 
             // If it is space, set v as true. 
             if (str[i] == ' ' ) 
             { 
                 v = true ; 
             } 
              
             // Else check if v is true or not. 
             // If true, copy character in output 
             // string and set v as false. 
             else if (str[i] != ' ' && v == true ) 
             { 
                 result += (str[i]); 
                 v = false ; 
             } 
         } 
         return result; 
     } 
  
     // Driver code 
     public static void Main() 
     { 
         String str = "geeks for geeks" ; 
         Console.WriteLine(firstLetterWord(str)); 
     } 
} 
  
// This code is contributed by PrinciRaj1992

输出如下:

gfg

时间复杂度:O(n)

另一种方法1:

这种方法使用Java的StringBuilder类。在这种方法中, 我们将首先根据空格分割输入字符串。字符串中的空格可以使用正则表达式进行匹配。分割后的字符串存储在字符串数组中。然后, 我们可以简单地将每个分割字符串的第一个字符附加在String Builder对象中。

C ++

// C++ implementation of the above approach
#include <bits/stdc++.h>
using namespace std;
  
string processWords( char *input)
{
     /* we are splitting the input based on 
     spaces (s)+ : this regular expression 
     will handle scenarios where we have words 
     separated by multiple spaces */
     char *p;
     vector<string> s;
  
     p = strtok (input, " " );
     while (p != NULL)
     {
         s.push_back(p);
         p = strtok (NULL, " " );
     }
  
     string charBuffer;
  
     for (string values : s)
  
         /* charAt(0) will pick only the first character 
         from the string and append to buffer */
         charBuffer += values[0];
  
     return charBuffer;
}
  
// Driver code
int main()
{
     char input[] = "geeks for geeks" ;
     cout << processWords(input);
     return 0;
}
  
// This code is contributed by
// sanjeev2552

Java

// Java implementation of the above approach
  
class GFG 
{
    private static StringBuilder charBuffer = new StringBuilder();
      
    public static String processWords(String input) 
    {
         /* we are splitting the input based on 
            spaces (s)+ : this regular expression 
            will handle scenarios where we have words 
            separated by multiple spaces */
         String s[] = input.split( "(\s)+" );
          
         for (String values : s) 
         {
            /* charAt(0) will pick only the first character 
               from the string and append to buffer */
             charBuffer.append(values.charAt( 0 ));
         }
          
       return charBuffer.toString();
    }
     
    // main function
    public static void main (String[] args) 
    {
       String input = "geeks for geeks" ;
       System.out.println(processWords(input));
    }
}
  
// This code is contributed by Goutam Das

Python3

# An efficient Python3 implementation 
# of above approach 
charBuffer = []
  
def processWords( input ):
      
     """ we are splitting the input based on 
     spaces (s)+ : this regular expression 
     will handle scenarios where we have words 
     separated by multiple spaces """
     s = input .split( " " ) 
      
     for values in s:
          
         """ charAt(0) will pick only the first
             character from the string and append
             to buffer """
         charBuffer.append(values[ 0 ])
     return charBuffer 
      
# Driver Code
if __name__ = = '__main__' :
     input = "geeks for geeks"
     print ( * processWords( input ), sep = "") 
      
# This code is contributed 
# by SHUBHAMSINGH10

C#

// C# implementation of above approach
using System; 
using System.Text;
  
class GFG 
{
  
private static StringBuilder charBuffer = new StringBuilder();
      
public static String processWords(String input) 
{
         /* we are splitting the input based on 
         spaces (s)+ : this regular expression 
         will handle scenarios where we have words 
         separated by multiple spaces */
         String []s = input.Split( ' ' );
          
         foreach (String values in s) 
         {
              
             /* charAt(0) will pick only the first character 
             from the string and append to buffer */
             charBuffer.Append(values[0]);
         }
          
     return charBuffer.ToString();
}
      
// Driver code
public static void Main() 
{
     String input = "geeks for geeks" ;
     Console.WriteLine(processWords(input));
}
}
  
// This code is contributed by Rajput-Ji

输出如下:

gfg

另一种方法2:使用边界检查器, 请参阅lsbin的另一篇文章

如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: