1

ブーストを使用して、文の各単語の最初の文字を大文字にする方法を探していました。コードの一貫性を保つため、つまり、入力文にスペースやタブが存在する場合、最終的な出力にはスペースやタブが含まれません。個々の単語を取得するには、boost::algorithm::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;                                                                   
 }    
4

4 に答える 4

0

誰かが興味を持っている場合に備えて、これが私の C++11 ソリューションです。

std::string s("some lowercase string");
s[0] = toupper(s[0]);
std::transform(s.begin()+1, s.end(),s.begin(),s.begin()+1, 
[](const char& a, const char& b) -> char
{
    if(b==' ' || b=='\t')
    {
        return toupper(a);
    }
    return a;
});
于 2016-03-14T23:19:04.383 に答える
0

このコードは私を働かせました

#include <iostream>
#include <boost/algorithm/string.hpp>
#include <boost/algorithm/string/trim.hpp>
#include <vector>
#include <ctype.h>

int main()
{
    using namespace std;

    string str("contAins Some       CapItal WORDS");
    string result;

    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)
    {                                                                                

        boost::to_lower(*i);
        (*i)[0]=toupper((*i)[0]);

        cout<<(*i)<<endl;
        result += *i +" ";
    }  

    boost::trim_right(result);
    cout<<result;
    return 0; 
}
于 2012-05-12T07:37:27.450 に答える