我试图使用c ++
解析位于linux文件系统中的/ proc / stat中的字符串我已经提升并将字符串保存为c ++程序中的变量
我想从字符串中提取单个值。每个值用空格分隔。
我想知道如何从字符串中提取第15个值。
答案 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个值。