从.text文件中读取整行并将特定信息存储到不同的字符串中

时间:2013-06-15 00:23:14

标签: c

所以我的.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 West Minster London 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需要是“西部大教堂”,但fscanf("%s")会读到空白。

1 个答案:

答案 0 :(得分:2)

如果所有单词都用空格分隔,那么单独的地址就不够了。考虑

  

123 Biddle Lane Fort Lauderdale FL 33301

" dumb"算法知道街道和城市之间的划分发生在哪里?它不能。

但并非一切都没有丢失。如果所有地址都是美国,那么您就有了前进的方向。您可以获得允许将邮政编码映射到城市名称的free database。在许多情况下,这可以解决模糊问题。算法类似于:

  1. 将该行分为单词。说有N个。
  2. 假设最后一个是邮政编码。
  3. 在数据库中查找zip以获取州和主要城市。
  4. 验证N-1'是与zip匹配的状态。
  5. 如果数据库中的主要城市有M个单词,则假定单词N-3-M到N-2是城市名称。
  6. 假设城市名称前面的字词是街道地址。