给定一个指向普通C NUL终止(通常很长)字符串的指针数组,我们如何才能最好地找到最小和最大的字符串?
答案 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::string
或pair<char *, int>
(字符串,长度)来优化你的代码,以及用一些有序的容器替换指针数组。