我试图在这里弄脏文件IO。我能做基本的事情,但有点用尽了。
我想从文本文件中读取输入。文本文件的每一行都遵循以下格式:<int> <char> <string literal> <float>
,如果它没有被忽略。
对于每一行,我们需要将变量存储为四种数据类型:
int i;
char c;
std::string s;
float f;
打印出来。对于下一行,它们会被覆盖并再次打印。
这是我的尝试:
int main() {
int i;
char c;
std::string s, x;
float f;
ifstream in;
in.open("Input.txt");
if(in) {
std::getline(in,x);
// How do I extract i, c, s and f components from x now?
cout << "\nInteger:" << i << ", Character: " << c << ", String: "
<< s << ", Float: " << f << endl;
}
return 0;
}
PS:尽管存在效率瓶颈,但请仅使用基本概念来解决此问题,而不是高级问题。
答案 0 :(得分:2)
您可以这样做:
while(in >> i >> c >> s >> f)
{
cout << "\nInteger:" << i << ", Character: " << c << ", String: "
<< s << ", Float: " << f << endl;
}
如果您的值以逗号分隔,则可以使用std::stringstream
/ std::getline
组合来解析令牌(std::getline
允许指定分隔符),如下所示:
std::stringstream ss; // from <sstream>
int field = 0;
while (std::getline(in, ss, ','))
{
switch (field)
{
case 0:
ss >> i;
break;
case 1:
ss >> c;
break;
case 2:
ss >> s;
break;
case 3:
ss >> f;
break;
}
if(++field == 4)
field = 0;
}
或者,您可以阅读整行,删除逗号(std::remove_if
),将转换后的行发送到stringstream
,然后执行ss >> i >> c >> s >> f
。