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

    技术2024-08-12  63

    //用指针数组处理

    #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);   }}

    最新回复(0)