c将文件中的行解析为流
发布时间:2020-12-16 09:46:19 所属栏目:百科 来源:网络整理
导读:我想解析一个逐行描述一组数据的文件.每个数据由3或4个参数组成:int int float(optional)string. 我打开文件ifstream inFile并在while循环中使用它 while (inFile) { string line; getline(inFile,line); istringstream iss(line); char strInput[256]; iss
我想解析一个逐行描述一组数据的文件.每个数据由3或4个参数组成:int int float(optional)string.
我打开文件ifstream inFile并在while循环中使用它 while (inFile) { string line; getline(inFile,line); istringstream iss(line); char strInput[256]; iss >> strInput; int i = atoi(strInput); iss >> strInput; int j = atoi(strInput); iss >> strInput; float k = atoi(strInput); iss >> strInput; cout << i << j << k << strInput << endl;*/ } 问题是最后一个参数是可选的,所以当它不存在时我可能会遇到错误.如何提前检查每个数据的参数数量? 此外, string line; getline(inFile,line); istringstream iss(line); 看起来有点红,我怎么能简单地说呢? 解决方法
在这种情况下使用惯用法,它变得更加简单:
for (std::string line; getline(inFile,line); ) { std::istringstream iss(line); int i; int j; float k; if (!(iss >> i >> j)) { //Failed to extract the required elements //This is an error } if (!(iss >> k)) { //Failed to extract the optional element //This is not an error -- you just don't have a third parameter } } 顺便说一句,atoi有一些非常不受欢迎的歧义,除非0不是你正在解析的字符串的可能值.由于atoi在出错时返回0,因此您无法知道返回值0是否成功解析值为0的字符串,或者如果它是错误的,除非您对原始字符串进行了一些相当费力的检查. 尝试坚持使用流,但在需要回归到atoi类型功能的情况下,请使用 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- cocos2d-js javascriptbinding实现
- c# – 在.NET中序列化大量链接的数据(自定义JSON
- 使用Xcode Helper Accessibility对Travis for OS
- c# – MemoryStream泄漏
- iphone – 如何在xcode 4.3中将项目或库导入ios应
- ruby-on-rails – 如何测试ActiveRecord属性是否
- vue2+el-menu实现路由跳转及当前项的设置方法实例
- ruby-on-rails – Rails Postgres重新连接RDS的故
- c# – FilterExpression的多个条件
- 正则表达式引擎的构建——基于编译原理DFA(龙书
热点阅读