C++ 将线转换为C+中的节点+;

C++ 将线转换为C+中的节点+;,c++,C++,我试图编写一个函数,将一行作为字符串,并将其转换为节点 Node convertLineToNode(string line){ char lineC[] = line; Node *n = new Node(); n->lastname=strtok(lineC," "); n->name=strtok(lineC," "); n->ID=strtok(lineC," "); } 但是它不能正常工作。它期望字符串行为字符数组。我无法

我试图编写一个函数,将一行作为
字符串
,并将其转换为
节点

Node convertLineToNode(string line){
    char lineC[] = line;
    Node *n = new Node();
    n->lastname=strtok(lineC," ");
    n->name=strtok(lineC," ");
    n->ID=strtok(lineC," ");
 }
但是它不能正常工作。它期望
字符串
行为
字符
数组。我无法将其转换为
char
array。我的问题有什么解决方案吗?

string::c_str()
将返回c字符串表示形式


但是,我不想使用C字符串库(Strutk),而是考虑改写您的方法来使用STD::String方法,甚至是Boost正则表达式库。

< P> C++的方式是:

Node* convertLineToNode(std::string const & line)
{
   std::istringstream iss(line);
   Node *n = new Node();
   iss >> n->lastname
       >> n->name
       >> n->ID;
   return n;
}

考虑返回一个共享的\u指针,而不是原始的

,这可能是因为您的
n->lastname
具有字符串数据类型。
strtok
返回
char*
,因此请确保您的数据结构与函数返回的内容完全一致

如果可以复制节点,它也可以这样工作:

Node convert(string line) {
   Node n;
   n.lastname = "abc";
   return n;
 }
但节点将需要支持复制:

Node n = convert("abc");

复制可以由复制构造函数来实现。

+1:老实说,我不会想到这一点。我想,真正的C++方法是让
节点
有一个构造函数,为其成员获取适当的值。或者,为
节点
重载
操作符>
。有很多选择。我应该包括哪些库来使用istringstream吗?@Space\u C0wb0y:通常,我会为我的结构定义一个>>操作符,并使用
boost::lexical_cast
@exculuber:
\35; include
当我调用带有字符串的提供参数的函数时,我得到以下错误:请求从
std::ifstream'转换为非标量类型
std::string'。如何将字符串转换为std::string?能否以更好的方式重写?