2015-04-01 102 views
2

令牌的適當數量的我有一個代碼如下生成使用升壓

std::string some_string = "-0.003 79350 -0.267 147"; 
boost::algorithm::trim (some_string); 
//std::cout << some_string << std::endl; 
boost::tokenizer<> tok(some_string); 
const auto n = std::distance(tok.begin(), tok.end()); 
std::cout << n << std::endl; 

我希望有令牌的數量爲4,但它給6。任何建議,將不勝感激。謝謝。

回答

-2

以下代碼根據需要輸出4。

#include<iostream> 
#include<string> 
#include<boost/tokenizer.hpp> 

int main() { 
    std::string s = "-0.003 79350 -0.267 147"; 
    boost::tokenizer<boost::char_separator<char> > tok(s, boost::char_separator<char>(" ")); 
    const auto n = std::distance(tok.begin(), tok.end()); 
    std::cout << n << std::endl; 
} 

Coliru上的相同代碼是here

+0

我不得不downvote你'使用命名空間std;' – Puppy 2015-04-01 11:50:12

+0

@Puppy其實我主要是關於它結合了'使用命名空間std'和事實感到驚訝'使用命名空間boost'這是一個非常糟糕的主意。這也可能是後續代碼中名稱空間仍然合格的原因... – sehe 2015-04-01 11:54:34

+0

@Puppy,代碼已修復。 – megabyte1024 2015-04-01 11:59:24

0

無需提升,也更正確。

這是更正確的假設,你其實是想如果你想保留的令牌,而不是僅僅解析數字解析數

Live On Coliru

#include <iostream> 
#include <sstream> 
#include <iterator> 

int main() { 
    std::istringstream some_string ("-0.003 79350 -0.267 147"); 
    std::cout << std::distance(std::istream_iterator<double>(some_string), {}); 
} 

更新

Live On Coliru

istringstream s("-0.003 79350 -0.267 147"); 

vector<string> vec(istream_iterator<string>(s), {}); 

cout << vec.size(); 
+0

我必須使用令牌以供進一步使用該字符串可能並不總是包含數字。所以,我遵循@ megabyte1024的答案。你的回答很好。 – Launa 2015-04-01 12:14:01

+0

@Launa這就是爲什麼一個很好的例子在你的代碼中很重要:)看看我的編輯。 (也** [Live](http://coliru.stacked-crooked.com/a/e798895ad8d3af78)**) – sehe 2015-04-01 12:26:52

+0

您的回答是有用的。但是,我沒有獲得投票的特權:) – Launa 2015-04-01 12:41:39