【发布时间】:2016-03-18 02:36:58
【问题描述】:
我正在处理一个需要对文件中的一些数据进行排序的项目。该文件是由“制表符空格”分隔的一长串字符串(我认为该文件是分隔的,但我不确定)。以下是文件中一行的示例:
2986043 Pic de Font Blanca Pic de Font Blanca Pic de Font Blanca,Pic du Port 42.64991 1.53335 T PK AD
中间的两个双精度数(例如:42.64991 和 1.5335)是我关心的,因为我将存储它们并在以后使用它们进行排序。这只是一个使用前 1000 行输入的数组的原型,但文件的实际大小是数百万行。实际的数据结构将是某种链表(我认为?不确定什么最适合这种工作)
这是一组循环,我从文件指针中对字符串进行标记,并尝试将字符串复制到我设置的指针数组中:
int curr_line=0;
int longlat;
char* coord[1000][2];
/* clock starts to time process
* this pair of loops works through each line of the file, token by token
*
*/
start = clock();
while(fgets(duff, 512, (FILE*)fp) !=NULL)
{
int coordFlag=0;
//char* token=strtok(duff, " ");
char* token=strtok(duff, " \t");
while(token)
{
if(verify(token))
{
//printf("tok: %s\n", token);
coordFlag++;
if(coordFlag==1)
{
printf("%s||", token);
strcpy(coord[curr_line][0], token);
}
if(coordFlag==2)
{
printf("%s\n", token);
strcpy(coord[curr_line][1], token);
}
}
//printf("tok: %s\n", token);
token=strtok(NULL, " \t");
}
curr_line++;
if(curr_line==1000) break;
}
目前,我遇到了运行时错误,程序在尝试存储第一个字符串时崩溃。我相信我错误地使用了数组和/或字符串和令牌的 char 指针。
我的主要目标是解析由空格和分隔制表符分隔的字符串行,并抓住中间的两个字符串,即经度和纬度,并将它们存储在一个数组中。
作为后续问题,如何将这种存储作为双倍存储。如,我可以解析令牌,然后创建一个空白双变量,复制解析的令牌并将其存储为双精度类型转换,或更有效的策略吗?
【问题讨论】:
-
@bmm6o 但根据其余代码,它不应该这样做。
标签: c arrays string pointers token