【问题标题】:get the first letter of each word in a string using c++ [closed]使用c ++获取字符串中每个单词的第一个字母[关闭]
【发布时间】:2013-08-24 21:51:15
【问题描述】:

我正在尝试做的示例:

String = "This Is My Sentence"

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

我正在努力使用 C++。

【问题讨论】:

标签: c++ mfc


【解决方案1】:
cout<<myString[0];
for(int i=0;i<(myString.size-1);i++)
        { if(myString[i]==" ")
          {
           cout<< myString[i+1];
          {
        }

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

【讨论】:

  • 我不需要检查您的解决方案就可以告诉您它不起作用。对不起,我太诚实了
  • 您能告诉我我的想法哪里错了吗?唯一的问题我看到字符串是否连续有多个空格,但它应该在给定的示例中工作。
  • 这不适用于第一个字母本身。不用多解释了。
  • 谢谢你的提示,我没想到。我的目的是向提问者展示你可以像数组一样使用字符串,因为他看起来像个初学者。我将编辑解决方案。
【解决方案2】:

看看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 ;-)

*约斯特

【讨论】:

  • 我喜欢 Boost,真的。但在这种情况下,我会称之为矫枉过正
  • @nijansen 只是一点点 ;-)... 是的,你是对的,但想象一下,下次需要多个分隔符的解决方案时,我不想看到 @nijansen 的调用每个分隔符的 987654326@ 函数(还要考虑多个空白字符)。这只是更强大的方法 - 这就是我发布它的原因。
【解决方案3】:

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

Split

For loop

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

【讨论】:

    【解决方案4】:

    尝试使用std::string,它是find 函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多