这是一个比较参数并按字典顺序对它们进行排序的程序。你能解释一下find在那里做什么以及它如何影响代码吗?我在很多代码中都看到了这种模型;它的值在 1 到 0 之间变化,所以请你澄清一下。
find
int main(int argc, char **argv) { char *tmp; int find; int i; find = 1; while (find) { find = 0; i = 0; while (++i < argc - 1) { if (strcmp(argv[i], argv[i + 1]) > 0) { tmp = argv[i]; argv[i] = argv[i + 1]; argv[i + 1] = tmp; find = 1; } } } i = 0; while (++i < argc) printf("%s\n", argv[i]); return (0); }
这个代码片段
find = 1; while (find) { find = 0; i = 0; while (++i < argc - 1) { if (strcmp(argv[i], argv[i + 1]) > 0) { tmp = argv[i]; argv[i] = argv[i + 1]; argv[i + 1] = tmp; find = 1; } } }
实现冒泡排序算法。
最初,假设命令行参数不按字符串排序。
find = 1;
然后在 while 循环中,标志find被重置为 0。
find = 0;
如果在内部 while 循环中
while (++i < argc - 1) { if (strcmp(argv[i], argv[i + 1]) > 0) { tmp = argv[i]; argv[i] = argv[i + 1]; argv[i + 1] = tmp; find = 1; } }
找到一个大于下一个参数(字符串)的参数(字符串)
if (strcmp(argv[i], argv[i + 1]) > 0)
然后交换相邻的参数,并将标志find设置为1表示参数数组尚未排序的信号(我们需要至少再迭代一次外部 while 循环来检查在此交换后所有参数是否确实已排序)。
1