本文概述
一个弦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的另一篇文章
如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。