c++ - 尝试从每个预期数据之间有多个空格的文件中读取和存储数据
问题描述
这是关于我如何读取和存储数据的简单代码。我有一个文本文件,在文本文件中是我想要传递给number
和的数据text
。如果文本文件包含诸如2存储到并且HelloWorld1存储到之类的文本2 HelloWorld1
,则代码运行良好。number
text
但是如果txt文件中的文字是这样的,2 Hello World 1
Hello、World和1之间有空格呢?我的问题是是否可以将2存储在中number
,将Hello World 1存储在text
. 我明白,由于空格,因此只有2和Hellonumber
并分别存储在两者text
中。有没有办法克服这个问题?
using namespace std;
int main(){
ifstream theFile("key.txt");
int number;
string text;
while(theFile>>number>>text){
cout<<number<<" and "<<text<<endl;
}
}
解决方案
您对默认的流运算符 >> 不走运(如果确实是您的情况)。
1:了解格式
前进的方向是了解从您的帖子判断您有些不确定的格式。
2:使用最好的工具来完成工作
之后,您可以为工作选择正确的工具。这可能涉及:std::getline 和 handpassing,可能使用正则表达式(在你的情况下,相当简单)、boost::spirit、标记化技术、boost::string_algo、lex/bison 等等。我要补充一点,自定义流运算符功能(如果可能)很少是直接的选择。
3:设计您的格式以匹配
作为了解格式的替代方法,如果您可以设计它,那就更好了。如果您有记录样式格式,处理带空格的字符串的一种简单方法是将字符串放在最后 - 然后将每条记录放在一行上。这样,您可以首先使用例如查看每一行。std::getline
然后只使用流运算符来完成其余的操作 - 知道字符串将排在最后。其他分隔符(除了换行符)当然也是可行的。
推荐阅读
- javascript - React js state props 在组件挂载后如何工作?
- php - 在 PHP 中将电话号码和分机与格式不佳的数据分开
- docker - 如何在声明性管道中动态切换 docker 代理和“常规”代理
- solr - 将突出显示限制为 Solr 5.5 中的匹配字段
- raspbian - 如果使用tocuh scrren,如何在铬中退出全屏
- java - 我应该在java中使用名词或动词作为实体名称吗?
- r - 我有一列带有长字符串,所以我想将它转换为 R 中的简单整数,以便我可以轻松地将其他表与该列连接起来
- java - 将 3 个列表组合成具有唯一值的单个集合
- sql - 带功能的CTAS
- sql - 如何防止 SQL Pivot 行中的 NULL 字段?