C++程序 打印字符串每个单词的第一个字母

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)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 示例