解析一个字符串以获取第n个字段

时间:2010-03-04 16:58:17

标签: c++

我试图使用c ++

解析位于linux文件系统中的/ proc / stat中的字符串

我已经提升并将字符串保存为c ++程序中的变量

我想从字符串中提取单个值。每个值用空格分隔。

我想知道如何从字符串中提取第15个值。

7 个答案:

答案 0 :(得分:4)

由空格分隔的

std::string可以从任何ostream自动解析。只需将整行放入std::istringstream并解析出第n个字符串。

std::string tokens;
std::istringstream ss(tokens);

std::string nth;
for (int i = 0; i < 15; ++i)
  ss >> nth;

return nth;

答案 1 :(得分:3)

#include <string>
#include <sstream>
#include <iostream>

using namespace std;

// return n'th field or empty string
string Get( const std::string & s, unsigned int n ) {
    istringstream is( s );
    string field;
    do {
        if ( ! ( is >> field ) ) {
            return "";
        }
    } while( n-- != 0 );
    return field;
}

int main() {
    string s = "one two three four";
    cout << Get( s, 2 )  << endl;
}

答案 2 :(得分:2)

我会在这里使用Boosts String Algorithms的分割算法:

#include <string>
#include <vector>

#include <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/split.hpp>

std::string line = "...."; // parsed line
std::vector<std::string> splits;
boost::algorithm::split( splits, parsed_line, boost::is_any_of( " " ) );

std::string value;
if ( splits.size() >= 15 ) {
  value = splits.at( 14 );
}

答案 3 :(得分:1)

请参阅this SO,这应该可以回答您的大部分问题。

答案 4 :(得分:0)

您可以使用boost::tokenizer空格作为分隔符并迭代值。

答案 5 :(得分:0)

你可以使用strtok函数与某个计数器在你达到第n个值时停止

答案 6 :(得分:0)

您可以使用std::string::find查找空格并重复,直到找到第15个值。