从C中的长字符串数组中有效搜索最短和最长的字符串

时间:2010-09-10 07:39:44

标签: c algorithm string

给定一个指向普通C NUL终止(通常很长)字符串的指针数组,我们如何才能最好地找到最小和最大的字符串?

5 个答案:

答案 0 :(得分:9)

在数组的每个条目上使用strlen

答案 1 :(得分:4)

也许循环通过它们会有帮助吗? - 好的,你不想要C ++的想法,让我们看看:

好的,再次:

char **strings; // initialized
int stringsNumber = 500; // number of string in first dimension
int longestLen = 0;
int shortestLen = MAX_INT; // or other REALLY BIG number ;]
char *longest = NULL;
char *shortest = NULL;
int current = 0;
for(int i =0; i < stringsNumber; i++)
{
  current = strlen(strings[i]);
  if(current > longestLen) { longestLen = current; longest = strings[i];  }
  if(current < shortestLen) { shortestLen = current; shortest = strings[i]; }
}

答案 2 :(得分:1)

你可以有另一个大小为n的char指针数组,其第i个指针指向第i个字符串的开头。

递增每个指针直到它到达终点。

第一个到达终点的是指向最短字符串的指针。

到达结尾的最后一个是指向最长字符串的指针。

答案 3 :(得分:1)

如果字符串真的很长,你应该考虑使用长度属性保存它们,该属性在输入字符串时已经计算过。

答案 4 :(得分:0)

如果它是给你的,你不管理它 - 迭代数组和strlen

如果你管理它 - 考虑使用std::stringpair<char *, int>(字符串,长度)来优化你的代码,以及用一些有序的容器替换指针数组。