【发布时间】:2023-03-30 19:05:01
【问题描述】:
我收到以下形式的输入:
(8,7,15)
(0,0,1) (0,3,2) (0,6,3)
(1,0,4) (1,1,5)
(2,1,6) (2,2,7) (2,5,8)
(3,0,9) (3,3,10) (3,4,11) (3,5,12)
(4,1,13) (4,4,14)
(7,6,15)
我必须记住三元组的数量。我编写了一个快速测试程序来尝试从cin 读取输入,然后拆分字符串以从输入中获取数字。该程序似乎没有读取所有行,它在(1,1,5) 之后停止并随后打印出随机的7
我为我尝试为我的作业创建的功能之一创建了这个快速测试功能:
int main ()
{
string line;
char * parse;
while (getline(cin, line)) {
char * writable = new char[line.size() + 1];
copy (line.begin(), line.end(), writable);
parse = strtok (writable," (,)");
while (parse != NULL)
{
cout << parse << endl;
parse = strtok (NULL," (,)");
cout << parse << endl;
parse = strtok (NULL," (,)");
cout << parse << endl;
parse = strtok (NULL," (,)");
}
}
return 0;
}
有人可以帮我修复我的代码或给我一个工作示例吗?
【问题讨论】:
-
您是否尝试过在调试器下运行它以找到它发生段错误的确切行?
-
无法复制:ideone.com/k9ZAb
-
@kay 它不再出现段错误,但这里仍然存在一个问题,导致我的输出不正确
-
您所要做的就是数三倍数?如果您知道这是唯一的格式(即该文件中除了三倍之外什么都没有),那么您可以只计算左括号
( -
我知道我很挑剔,但是您可以使用字符串的 c_str() 方法将字符串转换为 char *。不易出错。
标签: c++ string segmentation-fault strtok