按空格对字符串进行标记

Tokenizing a string by space

本文关键字:字符串 空格      更新时间:2023-10-16

我有以下char*

char* config = "username 12345 google.com 225";

当尝试通过空格分割它时,我期望结果是字符串中包含的单词的vector<string>,但是我只得到第一个单词,没有更多。

下面是我使用的代码:
istringstream iss_str(config);
string token;
// storage for splitted config data
vector<string> tokens;
// port number is an integer value, hence it should
// be type-cast back to integer
int config_int_port = 0;
while( getline(iss_str, token, ' ') ) // I also have replaced space with 00 but to no avail
{
    tokens.push_back(token);
}

我得到的结果是一个大小为1的向量,它只包含第一个单词,username

我也用了下面的方法,但结果和前面的一样:

copy(istream_iterator<string>(iss_str),
     istream_iterator<string>(),
     back_inserter(tokens));

我使用下面的函数来执行上面的代码:

void __cmd_conf(char* __config)

它叫做

__cmd_conf(optarg);

optarg是linux下一个选项参数的全局变量

这段代码按我的预期工作:

#include <string>
#include <sstream>
#include <vector>
#include <iostream>
using namespace std;
int main() {
  const char* config = "username 12345 google.com 225";
  istringstream iss_str(config);
  string token;
  // storage for splitted config data
  vector<string> tokens;
  // port number is an integer value, hence it should
  // be type-cast back to integer
  int config_int_port = 0;
  while( getline(iss_str, token, ' ') )
    {
      cout << "token " << token << "n";
      tokens.push_back(token);
    }
  cout <<"tokens len "<<tokens.size()<<"n";
}

输出为:

token username
token 12345
token google.com
token 225
tokens len 4