C语言,指针练习

从键盘输入n(n<=10),然后再输入n个字符串,找出其中最长和最短的字符串,并输出其长度与字符串内容,然后将这些字符串按照从大到小的顺序在屏幕上输出。编写相应程序。... 从键盘输入n(n<=10),然后再输入n个字符串,找出其中最长和最短的字符串,并输出其长度与字符串内容,然后将这些字符串按照从大到小的顺序在屏幕上输出。编写相应程序。 展开
 我来答
小学生多关照0
2014-05-30
知道答主
回答量:1
采纳率:0%
帮助的人:1347
展开全部
/*很多方法 我提供比较好写的一种 最好操作的是把文件重定向成输入缓冲区 那最方便 但是代码比较多 我就不写了 自己会了漫漫摸索*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>

#define STR_SIZE 1000 //规定最长字符数

/*交换地址即可*/
void swap(void* str[],int i,int j)
{
void* tmp=str[i];

str[i]=str[j];

str[j]=str[i];

}

/*简单的快速排序*/
void quick_sort(void** str,int start,int end)
{
if(start > end)

{
return;

}
swap(str,start,(start+end)/2);

int last=start;

for(i = start+1; i <= end; i++)

{
if(strcmp(str[start],strcmp(str[i])) > 0)
{
swap(str,++last,i);

}
}
swap(str,start,end);

quick_sort(str,start,last-1);

quick_sort(str,last+1,end);

}

int main(int argc,char* argv[])
{
int n;

printf("输入n:");

scanf("%d",&n);

/*清空输入缓冲区 主要清除\n 可直接scanf("%*c")*/

// scanf("%*[^\n]");

scanf("%*c");

char* str[n];

int i;

int min=0,min_index=0; //记录最短的字符串长度和下标

int max=0,max_index=0; //记录最长的字符串长度和下标

for(i = 0; i < n ; i++)

{
str[i]=malloc(STR_SIZE);

assert(str[i]);

//fgets按行输入 并且在行的最后自动添加'\0'

assert(fgets(str[i],STR_SIZE,stdin)); //从输入缓冲区中读取

str[i][strlen(str[i])-1]='\0'; //把换行符去掉

if(min > strlen(str[i]))

{

min=strlen(str[i]);

min_index=i;

}
if(max < strlen(str[i]))

{
max=strlen(str[i]);

max_index=i;

}
}

printf("min:%d %s",min,str[min_index]);

printf("max:%d %s",max,str[max_index]);

//定义一种简单的快速排序法
quick_sort((void**)str,0,n-1);
for(i = n-1; i >= 0; i++)
{
printf("%s\n",str[i]);

}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式