如何测试空白:
how to test for white space c++:
我试图解析。csv文件,我需要能够测试回车。下面是一个名为sample.csv的测试.csv文件:
2
3
您将注意到,该文件中有两行和一列。我现在编写以下c++代码:
ifstream myfile (sample.csv); //Import file
char nextchar;
myfile.get(nextchar);
cout<<nextchar<<'n';
myfile.get(nextchar);
cout<< nextchar<<" If 0, then that was not a carriage return. If 1, it was. :"<<(nextchar=='n')<<'n';
myfile.get(nextchar);
cout<<nextchar<<'n';
我希望得到以下输出:
2
If 0, then that was not a carriage return. If 1, it was. :1
3
但是,我得到:
2
If 0, then that was not a carriage return. If 1, it was. :0
3
这怎么可能?我如何测试回车??
可以是一对字符CR + LF。在任何情况下,您都可以自己输出该字符的代码。你为什么不这样做呢?也可以应用标头<cctype>
std::isspace
我建议使用标准函数std::getline
来读取整行,而不是使用get。
在假设中有很多事情可能会出错:操作系统行为,用于编写示例文件的文本编辑器,行末不希望的额外空间或制表符,以及用于打开文件的ios_base::openmode
,以及这些之间的所有可能的组合…
首先插入这一行,看看你实际读到的是什么:它是0x0d还是0x0a ?还是别的什么?
cout << "Char read: 0x0"<< std::hex << (int)nextchar<<"n";
cout << "If 0 ... // Existing line
你也可以用下面的东西代替你的样品。它以二进制模式打开文件,并以十六进制显示文件中的字符:
ifstream myfile ("sample.csv", ifstream::binary); //Import file
while (myfile.good() ) {
char nextchar;
myfile.get(nextchar);
if (myfile.good())
cout << "0x0"<< std::hex << (int)nextchar
<< " " << (isprint(nextchar)? nextchar:'?') <<"n";
}
如果第二行和第三行分别是0x0d和0x0a,则可以确定文本编辑器添加了额外的CR。
那么您可以在上面的代码中删除ifstream::binary
。通常应该有,正如您在第二行中指出的那样,只有0x0a。如果不是这样,那么您应该调查默认的openmode是否以某种方式被改变了。
顺便说一下,我已经在windows下编译了你的原始代码,并使用记事本准备了示例文件,运行程序得到了…如你所愿!然后我重新做了测试,并做了以下修改,最终得到了你得到的结果。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 无法通过空白将文本文件行分隔为矢量
- 尽管测试成功,CppUnit测试核心仍被丢弃.为什么
- 数据成员SFINAE的C++17测试:gcc vs clang
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么二进制搜索在我的测试中不起作用
- 从父数组测试用例构造二叉树失败
- 试图对缓存进行跨步测试,但程序并没有结束
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- OpenGL在启用深度测试时不会丢弃我的碎片
- 为测试目标创建具有不同源文件夹的文件
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- VC++本机单元测试,找不到调试符号
- 换位表导致测试失败(但在游戏中运行良好)
- 用于交叉编译和CMake的预处理器宏的单元测试
- 谷歌测试中的期望值存储在哪里
- 如何在for循环中包含两个索引值的测试条件
- 在OpenGL中启用深度测试后,我的整个屏幕是空白的(恢复为清晰的颜色)-为什么
- 如何测试空白: