首页 > 其他 > 详细

解题报告

时间:2019-12-16 22:28:46      阅读:93      评论:0      收藏:0      [点我收藏+]
技术分享图片

该题涉及了二级指针的应用,当然,因为本题所给出的数据边界清晰,方便我们定义二维数组,所以我采用了二维数组的解法。
#include <stdio.h>
#include <string.h>
main()
{
    char str[20][10], p[20], q[10];
    int i, j, k = 0;

1.在结束符‘#‘的处理上,通过先判断结束符,再将内容输入二维数组。

2.我们需要让计算机知道二维数组中有内容的行数,所以设计了变量k来计算行数。
    while (1)
    {
        scanf("%s", q);
        if (q[0] == ‘#‘)break;
        else strcpy(str[k], q);
        k++;
    }

3.题目要求按长度从小到大排序后输出,所以这里我采用冒泡排序(当然还可以用选择排序)。
    for (i = 0; i < k - 1; i++)
        for (j = 0; j < k - i - 1; j++)
         if (strlen(str[j]) > strlen(str[j + 1]))
            {
                strcpy(p, str[j]);
                strcpy(str[j], str[j + 1]);
                strcpy(str[j + 1], p);
            }
(选择排序):

for (i = 0; i < k - 2; i++) {
    min = i;
    for (j = i + 1; j < k - 1; j++) {
        if (strlen(str[i]) > strlen(str[j]))
        {
        min = j;
        }
    }
    strcpy(p, str[min]);
    strcpy(str[min], str[i]);
    strcpy(str[i], p);
}


4.最后就是按题目要求输出了。
    for (i = 0; i < k; i++)
printf("%s ", str[i]);
}
以下以下是完整代码:
#include <stdio.h>
#include <string.h>
main()
{
	char str[20][10], p[20], q[10];
	int i, j, k = 0;
	while (1)
	{
		scanf("%s", q);
		if (q[0] == ‘#‘)break;
		else strcpy(str[k], q);
		k++;
	}
	for (i = 0; i < k - 1; i++)
		for (j = 0; j < k - i - 1; j++)
		    if (strlen(str[j]) > strlen(str[j + 1]))
			{
				strcpy(p, str[j]);
				strcpy(str[j], str[j + 1]);
				strcpy(str[j + 1], p);
			}
	for (i = 0; i < k; i++) 
        printf("%s ", str[i]);
}

  

解题报告

原文:https://www.cnblogs.com/chentao123167/p/12051441.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!