C语言,指针练习
从键盘输入n(n<=10),然后再输入n个字符串,找出其中最长和最短的字符串,并输出其长度与字符串内容,然后将这些字符串按照从大到小的顺序在屏幕上输出。编写相应程序。...
从键盘输入n(n<=10),然后再输入n个字符串,找出其中最长和最短的字符串,并输出其长度与字符串内容,然后将这些字符串按照从大到小的顺序在屏幕上输出。编写相应程序。
展开
1个回答
展开全部
/*很多方法 我提供比较好写的一种 最好操作的是把文件重定向成输入缓冲区 那最方便 但是代码比较多 我就不写了 自己会了漫漫摸索*/
#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]);
}
}
#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]);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询