作者acgotaku (otaku)
看板C_and_CPP
标题[问题] strtok与getline同时使用
时间Sun Nov 6 04:46:50 2016
开发平台(Platform): (Ex: Win10, Linux, ...)
OS X
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
编译器:xcode8
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
各位先进好,我是c++新手,在写一个将ip逐行分开的程式,(1|2|3|4=>1 2 3 4)
现在我遇到的问题是我getline读到的string没办法丢给strtok去处理
喂入的资料(Input):
喂入资料:写入TXT档案
预期的正确结果(Expected Output):
预期出现分割string
错误结果(Wrong Output):
错误结果:Token: line.str()
程式码(Code):(请善用置底文网页, 记得排版)
int main () {
string line;
ifstream myfile ("myfile.txt");
if (myfile.is_open())
{
while ( getline (myfile,line,'\n') )
{
char *p = strtok("line.c_str()", "|");
while (p)
{
printf ("Token: %s\n", p);
p = strtok(NULL, "|");
}
cout << line << '\n';
}
myfile.close();
}
else cout << "Unable to open file";
return 0;
*[36m补充说明(Supplement):*[m
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 150.135.210.46
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1478378813.A.4B7.html
1F:→ EdisonX: 1. strtok(line.c_str(), "|") ; ---> 注意还是会有问题 11/06 04:50
※ 编辑: acgotaku (150.135.210.46), 11/06/2016 04:51:50
2F:→ EdisonX: 2. 因 strtok 会改变字串内容, 而 line.c_str() 传回的是 11/06 04:51
3F:→ EdisonX: const char * , 意指不想让你改变, 所以建议先做一份副本 11/06 04:51
4F:→ EdisonX: (用 strcpy) ,再做 strtok. 11/06 04:52
5F:推 steve1012: 我会想用find_first_of 自己parse 11/06 04:57