设计一个函数,对n个字符串由大到小的顺序
排列,n由程序读入,字符串的输出和输入都
在main函数中进行。
代码加流程图,简单啊
是否还需要,代码和流程图都可以搞定
call我
/**字符串排序*/
#include<stdio.h>
#include<string.h>
void Sort_String(char arr[][50], int size)
{
char tmp[50];
if(arr == NULL || size < 2)//字符串个数小于2的直接返回,不用排序
{return;}
for(int i = 0; i < size - 1; i++)
{
for(int j = 0; j < size - i - 1; j++)
{
if(strcmp(arr[j], arr[j + 1]) < 0)//如果后一个字符串大于前面的一个,就进行交换操作
{
//利用冒泡的排序算法对字符串进行排序
strcpy(tmp,arr[j]);
strcpy(arr[j],arr[j + 1]);
strcpy(arr[j + 1],tmp);
}
}
}
}
int main(){
int n,i;
char arr[100][50];
printf("打算输入多少个字符串:");
scanf("%d",&n);
getchar();//吃掉回车符
printf("请输入数据:\n");
for(i=0;i<n;i++){
gets(arr[i]);
}
Sort_String(arr,n);
printf("排序后:\n");
for(i=0;i<n;i++){
puts(arr[i]);
}
return 0;
}
#include <stdio.h>
#include <string.h>
void sorts(char s[][100],int n)
{
char t[100];
for(int i=0;i<n-1;i++)
for(int j=0;j<n-i-1;j++)
{
if(strcmp(s[j],s[j+1]) < 0)
{
strcpy(t,s[j]);
strcpy(s[j],s[j+1]);
strcpy(s[j+1],t);
}
}
}
int main()
{
int n;
char s[100][100];
scanf("%d",&n);
getchar();
for(int i=0;i<n;i++)
gets(s[i]);
sorts(s,n);
for(int i=0;i<n;i++)
puts(s[i]);
}
参考代码:
#include<iostream>
using namespace std;
void sort(int a[],int n)//形参数组相当于指针变量int *
{
int i,j,t;
for(i=1;i<n;i++)//外循环控制比较对轮数n-1轮
for(j=0;j<n-1;j++)//内循环控制比较对次数,第i轮中n-i次
if(a[j]>a[j+1])
{t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
int main()
{
int b[5],i;
for(i=0;i<5;i++)
cin>>b[i];
sort(b,5);//形参数组指针变量,实参数组用数组名
for(i=0;i<5;i++)
cout<<b[i]<<" ";
return 0;
}
#include <stdio.h>
#include<string.h>
void rule(char (*s)[100],int n);
int main()
{
int n;
scanf("%d",&n);
getchar();
char s[n][100];
for(int i=0;i<n;i++)
{
gets(s[i]);
s[i][strlen(s[i])]='\0';
}
rule(s,n);
for(int k=0;k<n;k++)
puts(s[k]);
return(0);
}
void rule(char (*s)[100],int n)
{
int i,j;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(strcmp(s[j+1],s[j])<0)
{
char t[100]={0};
strcpy(t,s[j]);
strcpy(s[j],s[j+1]);
strcpy(s[j+1],t);
}
}
}
}