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?能否以更好的方式重写?