У меня проблемы с чтением в файле, который содержит пробел и пунктуацию. я использую inFile >> letter
читать полукокса и число. Когда я читаю файл, который является пробелом или пунктуацией, это останавливает чтение текстового файла.
Вот текстовый файл, который мне нужно прочитать
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();
Может кто-нибудь сказать мне, как это исправить?
Спасибо
Я скомпилировал этот код (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
использование 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';
}
}