使用c++获取字符串中每个单词的第一个字母
get the first letter of each word in a string using c++
我尝试做的事情的示例:
String = "This Is My Sentence"
我希望得到这样的结果:"TIMS",它只需要每个单词的第一个字母。
我正在与C++作斗争。
cout<<myString[0];
for(int i=0;i<(myString.size-1);i++)
{ if(myString[i]==" ")
{
cout<< myString[i+1];
{
}
我没有检查它是否以这种方式编译,但你可以了解这个可能的简单解决方案。它只适用于与您的示例类似的字符串。您应该像其他人已经建议的那样查看拆分方法。
尝试使用std::string
及其find
函数。
按空格将其拆分为一个数组,使用for循环获取每个单词,并将第一个字母添加到字符串中。
拆分
对于环路
在获取第一个值的循环中,只需执行"string_word[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字符串算法(同样未经测试)
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++;-)
*Jost
相关文章:
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- std::find,返回所有找到的值的替代方法,而不仅仅是存在重复的向量的第一个值
- 如何仅读取文本文件中的第一个值
- 在C++中,如何在第一个"system()"结束后执行第二个"system()"?
- 查找不在标准中的第一个值::设置<int>最小-最大值
- C++:忽略第一个 cin.ignore 之后的输入
- 在C++中打印多个矢量的第一个值
- C++去除前x个元素的有效方法,在不改变向量大小的情况下将第x+1个元素推到第一个
- C++第一个cout将不会打印
- 我们可以在第一个else-if条件结束后使用另一个else-if条件吗
- OpenGL:第二个VBO破坏了第一个VBO
- 为什么第一个Dynamic_cast没有投射到基类?
- 如何将行的第一个单词作为一个变量,将行的其余部分作为另一个变量进行归档/存储
- OpenGL 2D游戏只绘制第二个精灵纹理而不是第一个
- C++ 为什么程序只读取第一个值
- 在我的第一个C++程序中需要一些帮助(简单)
- 为什么我的代码在第一个 if 语句处中断?
- 是否可以从另一个类对象调用一个类函数而不继承第一个类
- 无法使我的第一个Windows OpenGL窗口抬起并运行
- 将参数初始化为构造函数,而不是第一个