这是有关如何读取和存储数据的简单代码。我有一个文本文件,并且在文本文件内部是我想传递给number
和text
的数据。如果文本文件包含诸如2 HelloWorld1
, 2 等文本存储在number
中并且 HelloWorld1 存储在{{1}中,则代码运行良好}。
但是,如果txt文件中的文本是text
,那么Hello,World和1之间有空格怎么办?我的问题是, 2 是否可以存储在2 Hello World 1
中,而 Hello World 1 是否可以存储在number
中。我了解到,由于存在空格,因此仅 2 和 Hello 分别存储在text
和number
中。有办法克服吗?
text
答案 0 :(得分:1)
您对默认的流运算符>>感到不走运(如果确实如此)。
前进的方式是了解格式,从您不确定的帖子来看。
之后,您选择适合该工作的工具。这可能涉及:std :: getline和handpass,也许使用regex(在您的情况下,相当简单),boost :: spirit,令牌化技术,boost :: string_algo,lex / bison等。 我要补充一点,自定义流运算符功能(虽然可能)很少是直接的选择。
作为了解格式的替代方法,如果可以设计格式,那就更好了。如果您具有记录样式格式,则处理带空格的字符串的一种简单方法是将字符串放在最后-然后将每条记录放在一行上。这样,您可以首先使用例如来查看每一行。 std::getline
,然后仅使用流运算符进行其余操作-知道字符串将排在最后。当然也可以使用其他定界符(而不是换行符)。
答案 1 :(得分:0)
我想在@darune的很好答案中添加一个示例。
这完全取决于输入格式。
假设您的行以数字开头,然后以字符串结尾,则可以使用以下方法:
请参阅:
#include <iostream>
#include <string>
#include <sstream>
#include <cctype>
#include <algorithm>
#include <regex>
std::istringstream testData (
R"#(1 data1
2 data2 data3
3 data 4
)#");
int main()
{
// Definition of variables
int number{};
std::string str{};
// Read file
// Read the number
while (testData >> number)
{
// Read the rest of the line in a string
getline(testData, str);
// Remove leading and trailing spaces
str = std::regex_replace(str, std::regex("^ +| +$|( ) +"), "$1");
// Show result
std::cout << number << ' ' <<str << '\n';
};
return 0;
}
结果:
1 data1
2 data2 data3
3 data 4
但是如上所述,它很大程度上取决于输入格式