在下面的代码中,我也想忽略这个字符“。但在添加之后我仍然将“Mr_Bishop”作为我的输出。
我有以下代码:
ifstream getfile;
getfile.open(file,ios::in);
char data[256];
char *line;
//loop till end of file
while(!getfile.eof())
{
//get data and store to variable data
getfile.getline(data,256,'\n');
line = strtok(data," ”");
while(line != NULL)
{
cout << line << endl;
line = strtok(NULL," ");
}
}//end of while loop
我的文件内容:
hello 7 “Mr_Bishop”
hello 10 “0913823”
基本上我想要的输出是:
hello
7
Mr_Bishop
hello
10
0913823
使用此代码我只能得到:
hello
7
"Mr_Bishop"
hello
10
"0913823"
提前致谢! :)
我意识到我在内部循环中错过了引用错误。但现在我收到以下输出:
hello
7
Mr_Bishop
�
hello
10
0913823
�
任何帮助?谢谢! :)
答案 0 :(得分:2)
看起来您使用了Wordpad或其他东西来生成文件。您应该在Windows上使用Notepad或Notepad ++或在Linux上创建ASCII编码的类似事物。现在你正在使用看起来像UTF-8编码的东西。
此外,“is”的正确转义序列。例如
line = strtok(data," \"");
将文件修复为ASCII编码后,您会发现错过了循环中的内容。
while(!getfile.eof())
{
//get data and store to variable data
getfile.getline(data,256,'\n');
line = strtok(data," \"");
while(line != NULL)
{
std::cout << line << std::endl;
line = strtok(NULL," \""); // THIS used to be strtok(NULL," ");
}
}//end of while loop
你错过了一套报价。 纠正文件和这个错误会产生正确的输出。
答案 1 :(得分:1)
让非常仔细查看您的代码:
line = strtok(data," ”");
注意引号如何以不同角度倾斜(我的确如此,我希望你的字体显示相同的东西)。您在strtok()
来电中仅包含结束双引号。但是,您的数据文件包含:
hello 7 “Mr_Bishop”
有两个不同类型的引号。确保您使用的是所有正确的字符,无论您的数据是什么“正确”。
更新:您的数据可能是UTF-8编码的(这就是你在那里使用双引号的方式)而你正在使用完全不知道UTF-8的strtok()
编码。所以它可能做错了,拆分多字节的UTF-8字符,并在行尾留下垃圾。