gpt4 book ai didi

c++ - 使用boost库将句子中每个单词的首字母大写

转载 作者:行者123 更新时间:2023-11-30 03:01:58 27 4
gpt4 key购买 nike

我正在寻找一种使用 boost 将句子中每个单词的首字母大写的方法。为了使代码一致,即如果输入句子中存在,最终输出将没有任何空格或制表符。为了获得单个单词,我使用 boost::alogrithm::split 并将它们组合回去 boost::algorithm::join 。但是如何让每个首字母大写?

我试过这段代码

 #include <iostream>                                                              
#include <vector>
#include <boost/algorithm/string/split.hpp>
#include <boost/algorithm/string.hpp>

int main()
{
using namespace std;

string str("cONtainS SoMe CApiTaL WORDS");

vector<string> strVec;
using boost::is_any_of;
using boost::algorithm::token_compress_on;

boost::algorithm::split(strVec, str, is_any_of("\t "), token_compress_on);

vector<string>::iterator i ;

for(i = strVec.begin() ; i != strVec.end(); i++)
{
(*i)[0] = boost::to_upper((*i)[0]);
cout<<*i<<endl;
}

return 0;
}

最佳答案

问题是定义如何确定一个句子是什么。这最简单的解决方案是它是任何以常规结尾的序列表达式 "[.!?][\"\']*"(因为你已经消除了白色空间);这实际上很简单,您无需常用表达。然后记住你看过它,并大写下一个词:

bool atEndOfSentence = true;
for ( std::vector<std::string>::const_iterator current = words.begin();
current != words.end();
++ current ) {
if ( atEndOfSentence ) {
(*current)[0] == toupper( (*current)[0] );
}
std::cout << *current << std::endl;
atEndOfSentence = isSentenceEnd(
*std::find_if( current->rbegin(), current->rend(),
IsNotQuoteChar() ).base() );
}

与:

struct IsNotQuoteChar
{
bool operator()( char ch ) const
{
return ch != '\'' and ch != '\"';
}
};

和:

bool
isSentenceEnd( char ch )
{
return ch == '.' || ch == '!' || ch == '?';
}

关于c++ - 使用boost库将句子中每个单词的首字母大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10551451/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com