这是我之前尝试从文件中获取值的上一篇文章的后续内容。我对其进行了一些修改,并预定义了排序数组,因此一切都在“排序”中。名称排序在某种意义上是可行的,但是当我输出结果时,我得到2-3次相同的结果,并且没有正确显示所有数据。
我删除了Struct,因为它只是给我带来了问题,并卡在了正常的不受控制的数组中。
// Sort by Name method
sortByName(hurricanYear, name, state);
// Output results to screen
printf("\nName Sort\n\n");
printf("%-10s%-10s%-10s\n", "Year", "Name", " State");
for (i = 0; i < MAX_ROWS; i++)
printf("%-10d%-10s%-10s\n", hurricanYear[i], name[i], state[i]);
/* This function sorts the strings by Name, while
maintaining stability with its respected data */
void sortByName(int year[], char* name[], char* state[])
{
int i, n;
// Loop for row count
for (i = 0; i < MAX_ROWS; i++)
{
// Loops for element count in name array
for (n = 0; n < i; n++)
{
// If name takes precedence over n+1 in array
// Copy name string to array
if (strcmp(name[n], name[n + 1])>0)
{
char* pName = name[n];
strcpy(name[n], name[n + 1]);
strcpy(name[n + 1], pName);
// Sort year according to name
int t = year[n];
year[n] = year[n + 1];
year[n + 1] = t;
// Sort state according to name
char* pState = state[n];
strcpy(state[n], state[n + 1]);
strcpy(state[n + 1], pState);
}
}
}
}
结果是我所期望的,但是使用名称排序功能。
名称排序
Year Name State
1972 Agnes FL
1969 Agnes FL
1960 Agnes FL
1983 Alicia TX
1992 Andrew FL-LA
1989 Andrew FL-LA
2004 Charley FL-SC-NC
1999 Charley FL-SC-NC
1995 Charley FL-SC-NC
2003 Charley FL-SC-NC
2005 Dennis FL-AL
2004 Dennis FL-AL
2004 Dennis FL-AL
2004 Dennis FL-AL
2009 Ida MS
2005 Ida MS
2005 Ida MS
2008 Ida MS
2011 Irene NC-NJ-MA-VT
2012 Isaac LA
是我的for循环这样做,还是我在函数中多次获得strcpy()结果?这也是我使用的列表:
1960 Donna Fl-NC
1969 Camille MS
1972 Agnes FL
1983 Alicia TX
1989 Hugo SC-NC
1992 Andrew FL-LA
1995 Opal FL-AL
1999 Floyd NC
2003 Isabel NC-VA
2004 Charley FL-SC-NC
2004 Frances FL
2004 Ivan AL
2004 Jeanne FL
2005 Dennis FL-AL
2005 Katrina FL-LA-MS
2005 Rita TX-LA
2008 Wilma FL
2009 Ida MS
2011 Irene NC-NJ-MA-VT
2012 Isaac LA
Ty Drescherjm指出了这一点。我设法通过删除指针并将其替换为strcpy()
来修复它#define MAX 100
void sortByName(int year[], char* name[], char* state[])
{
int i, n;
char plh[MAX]; // placeholder
// Loop for row count
for (i = 0; i < MAX_ROWS; i++)
{
// Loops for element count in name array
for (n = 0; n < i; n++)
{
// If name takes precedence over n+1 in array
// Copy name string to array
if (strcmp(name[n], name[n + 1])>0)
{
strcpy(plh, name[n]);
strcpy(name[n], name[n + 1]);
strcpy(name[n + 1], plh);
// Sort year according to name
int t = year[n];
year[n] = year[n + 1];
year[n + 1] = t;
// Sort state according to name
strcpy(plh, state[n]);
strcpy(state[n], state[n + 1]);
strcpy(state[n + 1], plh);
}
}
}
}