C++程序 打印字符串每个单词的第一个字母
给定一个包含小写英文字母和空格的字符串 str ,它可能包含多个空格。获取每个单词的第一个字母并将结果作为字符串返回。结果不应包含任何空格。
例子:
输入: str = “geeks for geeks”
输出: gfg
输入: str = “happy coding”
输出: hc
思路是遍历字符串 str 的每个字符并维护一个布尔变量,初始设置为 true。 每当遇到空格时设置布尔变量为 true。 如果遇到空格之外的任何字符,检查布尔变量是否为 true,在 此情况下将字符复制到输出字符串并将布尔变量设置为 false。 如果布尔变量设置为假,则不进行任何操作。
算法:
1.遍历字符串 str。 并将变量v初始化为 true。
2.如果 str[i] == ‘ ‘ ,将v设置为 true。
3.如果 str[i] != ‘ ‘, 检查v是否为 true。
a)如果是,将 str[i] 复制到输出字符串并设置v为 false。
b)如果是假,则不进行任何操作。
// C++程序:查找包含另一个字符串每个单词的第一个字符的字符串。
#include<bits/stdc++.h>
using namespace std;
//查找具有每个单词的第一个字符的字符串。
string firstLetterWord(string str)
{
string result = "";
//遍历字符串。
bool v = true;
for (int i = 0; i < str.length(); i++)
{
//如果是空格,则将v设置为true。
if (str[i] == ' ')
v = true;
//否则检查v是否为真。
//如果是真的,请将字符复制到输出字符串并将v设置为false。
else if (str[i] != ' ' && v == true)
{
result.push_back(str[i]);
v = false;
}
}
return result;
}
//主驱动程序
int main()
{
string str = "geeks for geeks";
cout << firstLetterWord(str);
return 0;
}
输出
gfg
输出:
gfg
Time Complexity: ** O(n)
space complexity: ** O(1),如果考虑存储结果字符串的空间,则为O(n)。
另一种方法:
在此方法中,我们将首先基于空格拆分输入字符串。可以使用正则表达式匹配字符串中的空格。拆分字符串存储在字符串数组中。然后,我们可以在结果中简单地添加每个分隔字符串的第一个字符。
// C++实现以上方法。
#include <bits/stdc++.h>
using namespace std;
string processWords(char *input)
{
/*我们根据空格(s)进行分割输入:此正则表达式
将处理我们由多个空格分隔的单词的情况*/
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)将只从字符串中提取第一个字符
并将其附加到缓冲区 */
charBuffer += values[0];
return charBuffer;
}
//主驱动程序
int main()
{
char input[] = "geeks for geeks";
cout << processWords(input);
return 0;
}
输出
gfg
方法:使用递归
#include<bits/stdc++.h>
using namespace std;
// 找到包含每个单词的第一个字符的字符串的函数。
string firstLetterWord(string str, int index, string result)
{
// 基本情况:如果索引超出范围,则返回修改后的字符串
if (index == str.length())
return result;
// 检查空格
if (str[index] == ' ')
{
// 将字符复制到结果字符串
result.push_back(str[index+1]);
}
// 对下一个索引递归调用函数
return firstLetterWord(str, index + 1, result);
}
// 驱动程序
int main()
{
string str = "geeks for geeks";
cout<< firstLetterWord(str, 0, "g");
return 0;
}
//此代码由Vinay Pinjala贡献。```
产量
gfg
时间复杂度: O(n)
辅助空间: O(n)