使用c ++获取字符串中每个单词的第一个字母

时间:2013-08-22 08:58:13

标签: c++ mfc

我想要做的例子:

String = "This Is My Sentence"

我希望得到这样的结果:“TIMS”,它只取每个单词的第一个字母。

我正在努力使用C ++。

4 个答案:

答案 0 :(得分:0)

尝试使用std::string及其find功能。

答案 1 :(得分:0)

cout<<myString[0];
for(int i=0;i<(myString.size-1);i++)
        { if(myString[i]==" ")
          {
           cout<< myString[i+1];
          {
        }

我没有检查它是否以这种方式编译,但你可以了解这种可能的简单解决方案。 它只适用于与您的示例类似的字符串。您应该像其他人已经建议的那样查看Split方法。

答案 2 :(得分:0)

将空格拆分为数组,使用for循环获取每个单词并将第一个字母添加到字符串中。

Split

For loop

在获取第一个值的循环中,只需执行“string_word [0]”

答案 3 :(得分:0)

看一下Boost Tokenizer - 代码应该看起来像这样(未经测试):

std::string firstLetters(const std::string& str)
{
    std::string result="";
    typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
    boost::char_separator<char> sep(" ");
    tokenizer tokens(str, sep);

    for (tokenizer::iterator tok_iter = tokens.begin();
        tok_iter != tokens.end(); ++tok_iter)
            {
                if (tok_iter->size>0)
                {
                    result+=(*tok_iter)[0];
                }
            } 
    return result;
}

或者,您也可以使用Boost String Algorithms(再次未经测试)

std::string firstLetters(std::string& str)
{
    std::string result="";
    std::vector<std::string> splitvec;
    boost::split( splitvec, str, boost::is_any_of(" "), boost::token_compress_on );

    //C++11:  for (std::string &s : splitvec)
    BOOST_FOREACH(std::string &s, splitvec)
    {
        if (s.size()>0)
        {
            result+=s[0];
        }
    }
    return result;
}

为了完整性我应该提到strtok函数,但这比C ++更多C; - )

*斯特