如何解析文本输入并将字符串转换为整数?

时间:2011-08-22 18:21:09

标签: c file-io

我有一个文件输入,其中我有以下数据。

1 1Apple 2Orange 10Kiwi
2 30Apple 4Orange 1Kiwi

等等。我必须从文件中读取这些数据并对其进行处理,但我不知道如何检索数据。我想将1(1个苹果)存储为整数,然后将Apple存储为字符串。 我想把整个1Apple读成一个字符串。然后用stoi函数做一些事情。

或者我可以逐个字符地阅读整个事物,然后如果该字符的ascii值位于b / w 48到57之后,那么我将把它组合成一个整数并将其余部分保存为字符串?我该怎么办?另外,我如何检查char的ASCII值是什么。 (我应该将char转换为int然后进行比较,还是有任何内置函数?)

2 个答案:

答案 0 :(得分:1)

当且仅当您的输入模式不会改变时,如何使用fscanf()函数。否则你应该使用fgets()并执行检查,如果你想将数字与你建议的字符串分开。

答案 1 :(得分:0)

有一种简单的正确方法可以使用标准的C库设施,一种更难以正确的方式,以及许多错误的方法。这是一种简单的正确方法:

  1. 使用char[]将整行录入fgets缓冲区。
  2. 使用strtolstrtoul
  3. 从此行中提取数字

    理解为什么不应该使用更容易看起来的替代品(*scanfatoi)非常重要。您最初可能会编写较少的代码,但是一旦您开始考虑如何处理即使是略微格式错误的输入,您就会发现应该使用strtol

    “相当困难的正确方式”是使用lexyacc。它们更复杂但也更强大。你不应该为这个问题需要它们。