按单个空格拆分字符串
可能重复:
如何在C ++中分割字符串?
我需要通过单个空格拆分字符串并将其存储到字符串数组中。 我可以使用istringstream实现这一点,但我无法实现的是这样的:
我希望每个空间都能结束当前的单词。 所以,如果连续有两个空格,我的数组中的一个元素应该是空白的。
例如:
(下划线表示空间)
This_is_a_string.
gets split into:
A[0] = This
A[1] = is
A[2] = a
A[3] = string.
This__is_a_string.
gets split into:
A[0] = This
A[1] = ""
A[2] = is
A[3] = a
A[4] = string.
我怎样才能实现这个?
你甚至可以开发你自己的分割功能(我知道,老式的):
size_t split(const std::string &txt, std::vector<std::string> &strs, char ch)
{
size_t pos = txt.find( ch );
size_t initialPos = 0;
strs.clear();
// Decompose statement
while( pos != std::string::npos ) {
strs.push_back( txt.substr( initialPos, pos - initialPos ) );
initialPos = pos + 1;
pos = txt.find( ch, initialPos );
}
// Add the last one
strs.push_back( txt.substr( initialPos, std::min( pos, txt.size() ) - initialPos + 1 ) );
return strs.size();
}
然后你只需要用一个vector <string>作为参数来调用它:
int main()
{
std::vector<std::string> v;
split( "This is a test", v, ' ' );
dump( cout, v );
return 0;
}
找到在IDEone中拆分字符串的代码。
希望这可以帮助。
如果严格地说一个空格字符是分隔符, std::getline
可能是有效的。
例如:
int main() {
using namespace std;
istringstream iss("This is a string");
string s;
while ( getline( iss, s, ' ' ) ) {
printf( "`%s'n", s.c_str() );
}
}
你可以使用提升?
samm$ cat split.cc
#include <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/split.hpp>
#include <boost/foreach.hpp>
#include <iostream>
#include <string>
#include <vector>
int
main()
{
std::string split_me( "hello world how are you" );
typedef std::vector<std::string> Tokens;
Tokens tokens;
boost::split( tokens, split_me, boost::is_any_of(" ") );
std::cout << tokens.size() << " tokens" << std::endl;
BOOST_FOREACH( const std::string& i, tokens ) {
std::cout << "'" << i << "'" << std::endl;
}
}
样本执行:
samm$ ./a.out
8 tokens
'hello'
'world'
''
'how'
'are'
''
''
'you'
samm$
链接地址: http://www.djcxy.com/p/19563.html