我正在尝试检查一行是否只有10个单词。我这样做的方法是,我复制一行,并逐一提取并递增计数器,如果是10,我操纵该行。但我觉得这是非常低效的,因为我必须为每一行做这个,大多数行是10个单词。所以我正在寻找一种更有效的方法。
while(getline(ifs, line)){
istringstream iss (line);
int s_counter = 0;
istringstream iss_copy = iss; //create a copy to test if there are 10 strings in a iss
string s;
while (iss_copy >> s){
++s_counter;
}
if (s_counter == 10){
while(iss>>word){
...//manipuate each word
}
}
}
答案 0 :(得分:0)
我这样做:
int main()
{
std::string s1("hi hi hi hi //blah");
size_t pos = s1.find('/');
std::cout << std::count(s1.begin(), s1.begin()+pos, ' ') << std::endl;
return 0;
}
OR
int countSpace(const std::string& s)
{
int count = 0;
for(size_t i=0; i<s.size()-1; i++)
{
if (s[i] == ' ')
{
count++;
}
if (s[i+1] == '/')
{
return count;
}
}
return count;
}
int main()
{
std::string s1("hi hi hi hi //blah");
countSpace(s1);
return 0;
}
答案 1 :(得分:0)
您可以更有效地使用STL算法。
template<typename charT>
struct CntSpaceFunctor {
bool isEnd ;
std::size_t value ;
CntSpaceFunctor( ) : isEnd(false),value(0) {}
inline void operator()( charT ch ) const {
if( ch == charT(' ') && !isEnd) ++value ;
else if( ch == charT('/') ) isEnd = true ;
else ;
}
};
int countSpace( const string& str ) {
CntSpaceFunctor<char> result ;
return for_each( str.begin() , str.end() , result ).value ;
}