黑马程序员技术交流社区
标题:
求帮忙,又是排序问题
[打印本页]
作者:
常洋洋
时间:
2015-4-17 12:20
标题:
求帮忙,又是排序问题
本帖最后由 常洋洋 于 2015-4-17 22:06 编辑
/*
9、 从键盘输入6个字符串(仅仅包含英文字母和数字),对这6个字符串从小到大排列并输出结果。(C语言)
*/
#include <stdio.h>
#include <string.h>
int main()
{
//定义一个数组,
char ch[6][500];
for (int i = 0; i<6; i++)
{
printf("键入第%d个字符串:",i+1);
scanf("%s",ch[i]);
}
//计算各个字符串长度
int count[6];
for (int i = 0; i<6; i++){
//把字符串长度赋值给数组里面的元素
count[i] = (int)strlen(ch[i]);
}
// 定义一个数组x用来存放各个字符串出现次数
int x[6];
for(int i =0;i<6;i++)
{
x[i]=count[i];
}
// 定义temp用于冒泡排序标记排序趟数
int temp;
// 冒泡排序 将count[0]~count[5]降序排序
for (int i = 0; i<5; i++)
{
for(int j = 0;j<5;j++)
{
if (x[j] < x[j+1])
{ // 当前一个元素小于后一个元素时,交换它们的位置
temp = x[j];
x[j] = x[j+1];
x[j+1] = temp;
}
}
}
int *p =x;
*(p-1)=x[0]-1; //x[0]前内存赋值,使它和x[0]不一样,方便下面使用x[0]和x[1]比较
//for 嵌套循环对这6个字符串从小到大排列并输出结果
for( int i=0;i<6;i++)
{ for(int j=0;j<6;j++)
{
if (x[i]==x[i-1]) break; //当字符大小有相同时,打断for循环,避免重复输出
else if (x[i]==count[j]) printf("%s %d\n",ch[j],x[i]);
}
}
return 0;
复制代码
最后一个循环看不懂啊,求高人给予解答
作者:
霸王睡别姬
时间:
2015-4-17 15:42
给你个能看懂的。。0.0..
//预处理命令
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//程序入口
int main()
{
//用一个二维数组存储
char array[6][100];
//排序临时变量
char string[30];
//循环变量
int i;
//提示输入6个字符串
for(i=0;i<6;i++)
{ //提示输到第几个了
printf("第%d个字符串:",i+1);
//接收用户输入
scanf("%s",array[i]);
}
//打印排序前的顺序
printf("排序前的顺序:\n");
for(i=0;i<6;i++)
{
printf("%s\t",array[i]);
}
//下面为冒泡排序
int j=0;
for(i=0;i<6;i++)
{
for(j=0;j<5-i;j++)
{
//用字符串比较函数和替换函数实现排序
if(strcmp(array[j],array[j+1])>0)
{
strcpy(string,array[j+1]);
strcpy(array[j+1],array[j]);
strcpy(array[j],string);
}
}
}
//打印排序后
printf("\n排序后的顺序:\n");
for(i=0;i<6;i++)
{
printf("%s\t",array[i]);
}
return 0;
}
复制代码
作者:
sunyang
时间:
2015-4-17 20:53
我帮2楼解释下吧
楼主的程序读起来太累了,建议数组名字使用有意义的单词或者拼音
/*
* 分析:用二维数组来存储字符串,一维长度表示字符串的个数,二维长度表示具体字符串的长度
把每一个元素(字符串)看做存放在字符数组中,再使用冒泡排序对其进行排序,判断大小的过程中需要使用到字符串函数strcmp
* 思路(步骤):
(1)定义一个二维字符数组,用于存储字符串,一维长度表示字符串的个数,二维长度表示具体字符串的长度;
(2)把每个字符串分别存放在一个字符数组中,这些字符数组是有序的集合;
(3)使用冒泡排序进行排序;
1)使用strcmp函数判断字符串之间的大小关系;
2)满足条件的时候,使用strcpy函数来完成相邻字符串的交换;
(4)最后通过遍历数组元素的方法打印出从小到大得排序结果
*/
复制代码
——————————————————————————————————————————
如果我解决了你的问题,请按照这个帖子把问题改成已解决,这样你我都能得到技术分,谢谢
http://bbs.itheima.com/thread-85079-1-1.html
作者:
sunyang
时间:
2015-4-17 23:23
sunyang 发表于 2015-4-17 20:53
我帮2楼解释下吧
楼主的程序读起来太累了,建议数组名字使用有意义的单词或者拼音
他思路是对的,结果不对是代码问题
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2