我在包含空格广告标点符号的文件中读取问题。我使用inFile >> letter
来读取char和num。当我读取空格或标点符号文件时,它会停止读取文本文件。
这是我需要阅读的文本文件
a 31
12
e 19
i 33
o 41
u 11
, 2
代码:
char letter;
int num;
inFile.open(FILENAME.c_str());
if(inFile.fail())
cout << "Error..." << endl;
while (inFile >> letter){
inFile >> num ;
}
inFile.close();
有人能告诉我如何修复它吗?
谢谢
答案 0 :(得分:0)
使用getline
代替并根据需要解析文本。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string line;
while (cin)
{
getline(cin, line);
string col1 = line.substr(0, 1);
string col2 = line.substr(2);
char letter = ' ';
int num = -1;
if (!col1.empty())
letter = col1[0];
if (!col2.empty())
num = stoi(col2);
cout << letter << "/" << num << '\n';
}
}
答案 1 :(得分:0)
我已编译此代码(MSVC2012):
char letter;
int num;
std::fstream inFile;
inFile.open("1.txt");
if(inFile.fail())
{
cout << "Error..." << endl;
}
while (inFile >> letter)
{
inFile >> num ;
std::cout << letter << " | " << num << std::endl;
}
inFile.close();
获得此输出:
a | 31
1 | 2
e | 19
i | 33
o | 41
u | 11
, | 2
如果你有另一个编译器并且它停止解析,你可以使用std :: getline并尝试使用std :: stringstream:
char letter;
int num;
std::fstream inFile;
inFile.open("1.txt");
if(inFile.fail())
{
cout << "Error..." << endl;
}
while (!inFile.eof())
{
std::string line;
std::getline(inFile, line);
std::stringstream stream(line);
stream >> letter >> num;
std::cout << letter << " | " << num << std::endl;
}
inFile.close();
但是如果你在字符串的开头有一个空格,你仍然会遇到问题。为避免这种情况,您应该按空格分割字符串并使用stringstream或atoi
解析部分