主函数中输入10个等长的字符串,用另一函数对他们排序,然后再主函数输出这10个一排好序的字符串!

本文介绍了如何使用指针数组处理字符串排序,通过三种不同的方法实现:直接使用指针数组、利用字符型二维数组以及使用指向一维数组的指针作为函数参数。每种方法都详细展示了如何输入字符串、进行排序及输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//用指针数组处理

#include<stdio.h>
#include<string.h>
int main()
{
 void sort(char *[]);
 int i;
 char str[10][6], *p[10];
 printf("please input 10 string:/n");
 for(i=0;i<10;i++)//首先将10个str的首地址赋值给10个p[i];
  p[i]=str[i];//将第i个字符串的首地址赋予指针数组p的第i个元素;
 for(i=0;i<10;i++)
  scanf("%s",p[i]);//scanf输入到&p[i]
 sort(p);
 printf("the output 10 string:/n");
 for(i=0;i<10;i++)
  printf("%s/n",p[i]);//输出到p[i];
}
void sort(char *s[])
{
 char *temp;
 int i,j;
 for(i=0;i<9;i++)
  for(j=0;j<9-i;j++)
   if(strcmp(*(s+j),*(s+j+1))>0)
   {
    temp=*(s+j);//*(s+j)指向数组指针,我想应该是字符串的首地址;所以可以直接赋值给temp指针;
    *(s+j)=*(s+j+1);
    *(s+j+1)=temp;
   }
}

//字符型二维数组
#include<stdio.h>
#include<string.h>
int main()
{
 void sort( char s[][6]);
 char str[10][6];
 int i;
 printf("please input string:/n");
 for(i=0;i<10;i++)
  scanf("%s",&str[i]);//str是指向由6个元素组成的一维数组的指针
 sort(str);//str是指向由6个元素组成的一维数组的指针
 printf("please output string:/n");
 for(i=0;i<10;i++)
 {
  printf("%s",str[i]);//str是指向由6个元素组成的一维数组的指针
  printf("/n");
 }
 return 0;
}
void sort(char s[10][6])//形参s是指向由6个元素组成的一维数组的指针
{
 char *p,temp[10];
 int i,j;
 p=temp;
 for(i=0;i<10;i++)
  for(j=0;j<10-i;j++)
   if(strcmp(s[j],s[j+1])>0)//格式错误不是strcmp(s[j]>s[j+1]);比较之后
   {
    strcpy(p,s[j]);
    strcpy(s[j],s[j+1]);
    strcpy(s[j+1],p);
   }
}

 

用指向一维数组的指针做函数参数

#include<stdio.h>
#include<string.h>
int main()
{
 void sort(char (*s)[6]);//一维数组的指针做函数参数
 int i;
 char str[10][6];
 char (*p)[6];//定义一维数组的指针做函数参数
 printf("please input string:/n");
 for(i=0;i<10;i++)
  scanf("%s",&str[i]);
 p=str;//将str一维数组指针,赋值给p;
    sort(p);
 printf("the output sequence :/n");
 for(i=0;i<10;i++)
  printf("%s/n",str[i]);
 return 0;
}
void sort(char (*s)[6])//s指向一维数组的指针做函数参数;
{
 int i,j;
 char temp[6], *t;
 t=temp;
    for(i=0;i<9;i++)//i应该小于9;如果小于10,那么就比较了9+1次;按照冒泡法则,
  for(j=0;j<9-i;j++)//第一次比较需要9次就是i=0到i=8共九次;第二次需要比较8次;依次类推;
   if(strcmp(s[j],s[j+1])>0)
   {
    strcpy(t,s[j]);
    strcpy(s[j],s[j+1]);
    strcpy(s[j+1],t);
   }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值