作者bulls5566 (公牛5566)
看板C_and_CPP
标题[问题] strtok以及纪录所在的列行
时间Wed Feb 7 13:46:08 2018
开发平台(Platform): macOS high Sierra (Ex: Win10, Linux, ...)
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
XCode
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
无
问题(Question):
小弟是c++新手,原先用ifstream逐行读,然後stringstream分析input的token
但是觉得好像有点慢,又听说strtok这功能,想尝试换另一种方式
但是google一下,尝试去做也做不太成
之後又把档案读进一个大char里,然後看到delimiter(空白、'\t'、'\n')来分割
但又会落到一些
最後还是想试着用strtok,但就卡关
我的目标是这样
我先初始化三个vector,一个存分析出来的token(vector<string>)
另外两个是vector<int> rowVec和vector<int> columnVec分别储存token的列和行
parse的时候,跳过空白、tab和'\n'
parse出token後,储存到vector<string>tokenVector,以及各自存列行到
rowVector和columnVector
我打算用strtok去做,但是真的想破头都做不了
别说存row和vec,光是分析token就无法
目前只能用最慢的stringstream做了
在此想请教各位前辈高手们,谢谢
喂入的资料(Input):
3 X11 6 X12 8 X13 9
2 X22 X31
10 R 1000 E 1001 E 1000 E 1001 E 1000 E 1000 A 1006 R 1007 A 1008
R 1009
3 X21 0 X22 2 X23 5
3 X11 X13 X31
8 E 2001 E 2000 R 2002 E 2000 E 2001 R 2005 E 2001 E 2002
1 X31 2
0
3 A 3000 I 3701 A 3002
0
3 X31 X11 X22
6 R 4000 E 4000 E 4001 R 4003 R 4004 E 4002
00
00
3 R 5000 I 5987 R 5002
1 X61 2
1 X31
6 R 6000 E 6000 A 6002 A 6003 R 6004 I 6005
预期的正确结果(Expected Output):
就是每一个数字或英文token或是英文token和数字都是token
而且可以查询其所在的row和vector
程式码(Code):(请善用置底文网页, 记得排版)
https://ideone.com/KeFWcc
补充说明(Supplement):
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 108.53.117.127
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1517982372.A.661.html
1F:推 steve1012: strtok 不是很安全 不能用 python 先处理吗? 02/07 15:53
2F:→ steve1012: 觉得有点慢是怎麽觉得的 有测过吗 02/07 15:54
3F:推 steve1012: 可以稍微讲一下是课程需求 还是练习 还是自己玩 02/07 15:56
4F:推 steve1012: 稍微看了一下 原来你只是要用空白分 你要是确定只有空 02/07 16:05
5F:→ steve1012: 白跟 tab 跟换行 可以用 find_first_of 跟 find_first_ 02/07 16:05
6F:→ steve1012: not_of 02/07 16:05
我这是已经交出去的作业,交出去的是用stringstream,老师是没有要求速度啦
但我想试试看strtok可以怎麽做
※ 编辑: bulls5566 (108.53.117.127), 02/07/2018 23:02:57
7F:→ uranusjr: 都用 C++ 就不要再 strtok 了拜托 02/08 14:44
9F:→ hunandy14: 切割字串范例 02/11 00:26