如何读取包含空格和标点符号的文件?

时间:2014-08-23 06:10:50

标签: c++ space punctuation

我在包含空格广告标点符号的文件中读取问题。我使用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();

有人能告诉我如何修复它吗?

谢谢

2 个答案:

答案 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

解析部分