【发布时间】:2014-12-02 12:34:21
【问题描述】:
我的代码发布在下面。我希望能够使用分隔符“()”进行解析,并将字符串转换为 cpp 中的整数。
while(getline(fin, line))
{
x = atoi((strtok(line.c_str(),'(,)'));
xx = atoi((strtok(NULL,"(),"));
xxx = atoi((strtok(NULL,"(),")));
cout << x << " " << xx << " " << xxx << "\n";
}
但由于某种原因,我收到以下错误
GraphTest.cpp:134:错误:从‘const char*’到‘char*’的无效转换
GraphTest.cpp:134:错误:正在初始化“char* strtok(char*, const char*)”的参数 1
.c_str 应该将我的字符串转换为 c 类型的字符串,从而允许我使用 atoi 和 strtok 函数。我很困惑,不胜感激。
【问题讨论】:
-
看起来你的语法很重要。为词法分析和解析选择合适的工具(例如:flex+bison 或 boost spirit,...)。
-
'(,)'是错误的。应该是"(,)"。 -
c_str()返回一个const char*,它应该是一个指向字符串内部缓冲区的不可修改的常量指针。strotok()修改输入字符串以执行标记化(这就是它接受char*而不是const char*的原因)那么根本不应该那样做。 -
这是一个 X Y 问题的例子;你使用了错误的工具来完成这项工作。退后一步,告诉我们您的输入数据是什么样的,以及所需的输出是什么。
标签: c++ delimiter text-parsing string-parsing