【问题标题】:How to get specific data from text line如何从文本行获取特定数据
【发布时间】:2019-11-20 18:31:49
【问题描述】:

我正在尝试获取文本文件中某一行的地址。此行包含以下内容;

亚利桑那州图森市东百老汇 7055 号凯马特

我正在使用 strcpy 和 strtok 函数来提取地址(7055 East Broadway),但到目前为止,我只能使用我的代码提取商店的名称(Kmart)。

char strLine[] 从文件中获取该行,我想将它返回给 char strAddress[]

如何仅提取地址以及可能的城市和州?

#define MAX_CHARS_PER_LINE 80

void getAddress(char strAddress[], const char strLine[])
{

   char newLine[MAX_CHARS_PER_LINE+1];

   strcpy(newLine,strLine);
   char* token = strtok(newLine, ",");

   strAddress = token;

   printf("%s\n",strAddress);


}

【问题讨论】:

  • man strtok,在这里你可以找到一个使用strtok的例子

标签: c strtok strcpy


【解决方案1】:

假设,

  1. 地址是行中的第二个元素
  2. 以逗号分隔。

您可以使用strtok获取地址如下。

void getAddress(char strAddress[], const char strLine[])
{
   char newLine[MAX_CHARS_PER_LINE+1];

   strcpy(newLine,strLine);

   char* token = strtok(newLine, ",");
   if (token != NULL)
   {
        token = strtok(NULL, ",");
   }
   if (token != NULL)
   {           
       strcpy (strAddress,token);
   }            
   return; 
}   

要了解城市和州,只需再拨打一次token = strtok(NULL, ",");

如果我想把城邦分开,然后把城市和州分开呢?

这是一项更复杂的工作,因为您在城市和州之间没有逗号。您还需要注意城市可以有两个词的情况,例如。新奥尔良。

您可以假设状态有 2 个字符。在这种情况下,建议的路线是

  1. 在字符串中隔离城市 + 州
  2. 删除字符串末尾的空格
  3. 字符串的最后 2 个字符是状态。

【讨论】:

  • 您还应该指出strAddress 应该指向有效且足够的内存。
  • 是的,这应该由调用函数来处理。
  • 并且token 应该每次都针对NULL 进行测试。
  • 谢谢!我将如何解释在它们之间有空间的城市?我可以用城市和州隔离一个字符串,但将它们分开是我的问题
  • 这种情况下一般是无法分离的。您需要找到可以在整个数据集中保持不变的其他一些因素。我提出了另一种假设,假设最后 2 个字符是状态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-09
相关资源
最近更新 更多