6

如何在空间拆分字符串并返回第一个元素?例如,在 Python 中,你会这样做:

string = 'hello how are you today'
ret = string.split(' ')[0]
print(ret)
'hello'

在 C++ 中执行此操作,我想我需要先拆分字符串。在网上看这个,我看到了几个很长的方法,但是像上面的代码一样工作的最好的方法是什么?我发现的一个 C++ 拆分示例是

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

using namespace std;
using namespace boost;

void print( vector <string> & v )
{
  for (size_t n = 0; n < v.size(); n++)
    cout << "\"" << v[ n ] << "\"\n";
  cout << endl;
}

int main()
{
  string s = "one->two->thirty-four";
  vector <string> fields;

  split_regex( fields, s, regex( "->" ) );
  print( fields );

  return 0;
}
4

1 回答 1

15

为什么要费心拆分整个字符串并沿途复制每个令牌,因为您最终会将它们扔掉(因为您只需要第一个令牌)?

在您非常具体的情况下,只需使用std::string::find()

std::string s = "one two three";
auto first_token = s.substr(0, s.find(' '));

请注意,如果没有找到空格字符,您的标记将是整个字符串。

(当然,在 C++03 中替换auto为适当的类型名称,即。std::string

于 2013-09-04T21:54:26.833 回答