c - 变量 find 到底在做什么?
问题描述
这是一个比较参数并按字典顺序对它们进行排序的程序。你能解释一下find
那里在做什么以及它如何影响代码吗?我在很多代码中都看到了这种模型;它的值在此期间在 1 和 0 之间变化,所以请您澄清一下。
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 循环的迭代,以检查在此交换之后是否所有参数确实已排序)。
推荐阅读
- c - 关于处理scanf无效输入的问题
- swift - 从委托方法修改视图控制器属性
- spring-boot - 如何从 MQ 队列接收消息并使用 Spring Boot 将相同的消息发布到主题
- labview - LabVIEW中的实时峰宽绘图
- python - 使用 Web 套接字和 Gunicorn 运行 Flask 应用程序时出错
- android - 如何,我可以将 id 从一个活动传递到一个活动吗
- java - 如果 while 循环为空,Swing 程序不会关闭,但是如果 while 循环包含 print 则关闭
- python - 将常规消息发送回浏览器
- python-3.x - “k_means”对象没有属性“k”
- git - Git推送分支错误:致命:协议错误:错误的行长字符:logg