C++ 使用c++;

C++ 使用c++;,c++,mfc,C++,Mfc,我正在尝试做的示例: String = "This Is My Sentence" 我希望得到这样的结果:“TIMS”,它只需要每个单词的第一个字母 我正在与C++进行斗争。 尝试使用std::string和它的find函数。cout将它按空格拆分为一个数组,使用for循环获取每个单词,并将第一个字母添加到字符串中 cout<<myString[0]; for(int i=0;i<(myString.size-1);i++) { if(myString[i]=

我正在尝试做的示例:

String = "This Is My Sentence"
我希望得到这样的结果:“TIMS”,它只需要每个单词的第一个字母


我正在与C++进行斗争。 尝试使用
std::string
和它的
find
函数。

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

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

在获取第一个值的循环中,只需执行“string\u word[0]”即可查看-代码应该是这样的(未经测试):

std::string首字母(const std::string&str)
{
std::string result=“”;
typedef boost::标记器标记器;
boost::字符分隔符sep(“”);
标记器标记(str、sep);
for(tokenizer::iterator tok_iter=tokens.begin();
tok_iter!=tokens.end();++tok_iter)
{
如果(国际热核实验堆->尺寸>0)
{
结果+=(*tok_iter)[0];
}
} 
返回结果;
}
或者,您也可以使用(同样未经测试)

std::string首字母(std::string&str)
{
std::string result=“”;
std::vector splitvec;
boost::split(splitvec、str、boost::是(“”)中的任意一个,boost::token\u compress\u on);
//C++11:for(std::string&s:splitvec)
BOOST_FOREACH(std::string&s,splitvec)
{
如果(s.size()>0)
{
结果+=s[0];
}
}
返回结果;
}

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


<>约斯特< /p>不要看到任何C++代码。这个答案为你做了大部分工作。这个问题本身并没有那么糟糕。如果你费心发布一些代码,你就会使用这个链接。开发一些代码,然后重新发布如果你有问题,我不需要检查你的解决方案,告诉你,它不会工作。对不起,我太诚实了,你能告诉我我的想法哪里错了吗?我看到的唯一问题是,如果字符串在一行中有多个空格,但在给定的示例中它应该可以工作。这对第一个字母本身不起作用。不用再解释了,谢谢你的提示,我没想过。我的意图是向提问者展示,你可以像数组一样使用字符串,因为他似乎是初学者。我会编辑解决方案。我喜欢Boost,真的。但在这种情况下,我会打电话overkill@nijansen只有一点点;-)。。。是的,你是对的,但是想象一下,下一次需要多个分隔符的解决方案时,我不想看到对每个分隔符调用
find
函数(同时考虑多个空白字符)。这只是一种更强大的方法——这就是我发布它的原因。
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;
}
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;
}