如何从包含符号,数字和字母的文本文件中读取整数?

时间:2015-07-07 14:18:48

标签: c++ ifstream

如何从包含符号,数字和字母的以下文本文件中读取整数?

我有以下文本文件

@
100:20 ;
20:40 ;
#

@
50:30 ;
#

@
10:21:37 ;
51:23 ;
22:44 ;
#

我尝试过以下代码:

int main()
{
    std::ifstream myfile("10.txt", std::ios_base::in);

    int a;
    while (myfile >> a)
    {
       std::cout<< a;
    }

    return 0;
}

void main()
{
   std::ifstream myfile("10.txt", std::ios_base::in);
   std::string line;

   while (std::getline(infile, line))
   {
       std::istringstream iss(line);
       int n;
       while (iss >> n)
       {
         std::cout << n ;
       }

    }
}

我得到的只是int变量的垃圾值(如果我初始化它的初始值)

如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

您可以尝试将每一行拆分为由冒号字符分隔的单独标记:

int main()
{
    std::ifstream myfile("10.txt", std::ios_base::in);
    std::string line;

    while (std::getline(myfile, line))
    {
        std::istringstream iss(line);
        std::string token;
        while (std::getline(iss, token, ':'))
        {
            std::istringstream tss(token);
            int n;
            while (tss >> n)
            {
                std::cout << n << std::endl;
            }
        }
    }

    return 0;
}

这应该打印:

100
20
20
40
50
30
10
21
37
51
23
22
44

根据comment,我建议使用更强大的解析算法来尊重文件的独特结构。

答案 1 :(得分:0)

尝试一个接一个地跳过坏人物

类似的东西:

while (!in.eof())
{
   int a;
   in >> a;
   if (!in) // not an int
   {
     in.clear(); // clear error status
     in.ignore(1); // skip one char at input
   }
   else
   {
     cout << a;
   }
 }