0

所以我的 .txt 文件如下所示:

Firstname MiddleName Lastname
Streetnumber streetname city state zipcode

我可以fgets()轻松地阅读每一行;但是我需要将每一位信息存储到它自己的 char 数组中。

使用fscanf("%s%s%s", %(ptr->name.firstname), %(ptr->name.middlename, %(ptr->name.lastname))

我可以轻松做到这一点。但是我遇到的问题是信息之间有空格。例如有人输入地址信息:

1223西大教堂伦敦CA 12332

使用fscanf(fp, "%s%s%s%s%s", &(ptr->streetno), &(ptr->streetname), &(ptr->city), &(ptr->state), &(ptr->zip)

存储的值将是:

streetno: 1222, streetname: West, city: Minster, state: London, zip: CA. 

streetname需要是“West Minster”,但要fscanf("%s")读到一个空格。

4

1 回答 1

2

如果所有单词都用空格分隔,那么仅地址是不够的信息。考虑

123 Biddle Lane 劳德代尔堡 FL 33301

“愚蠢”的算法如何知道街道和城市之间的划分发生在哪里?它不能。

但一切都没有丢失。如果所有地址都是美国,那么您有前进的道路。您可以获得一个免费的数据库,该数据库允许将邮政编码映射到城市名称。这可以解决很多情况下的歧义问题。该算法将类似于:

  1. 将行分成单词。假设有 N 个。
  2. 假设最后一个是邮政编码。
  3. 在数据库中查找 zip 以获得州和主要城市。
  4. 验证第 N-1 个单词是与 zip 匹配的状态。
  5. 如果数据库中的主要城市有 M 个单词,假设单词 N-3-M 到 N-2 是城市名称。
  6. 假设城市名称前面的词是街道地址。
于 2013-06-15T01:16:23.500 回答