回 帖 发 新 帖 刷新版面

主题:指针法编程

8.    用指针法编程,从键盘上输入多个字符串(每个串不超过15个字符且没有空格),将这些字符串按从小到大的次序排列出来。
实验步骤与要求:
(1)    设计二维数组存放多个字符串;
(2)    设计指针数组用于访问每个字符串;
(3)    在主函数中输入多个字符串;
(4)    对多个字符串进行排序处理;
(5)    输出排序结果。

我的自编程序如下:
void main()
{
    int i;
    char *s[N][15];
    void print(char *str[N][15],int n);
    void sort(char *str[N][15],int n);
    for(i=0;i<N;i++)
    {
        printf("请输入%d 串字符:",i+1);
        scanf("%s",&s[i]);
    }
    sort(s,N);
    print(s,N);    //将二维数组的首地址传给print

}
void sort(char *str[N][15],int n)
{
    int i,j,k;
    char *temp;
    for(i=0;i<N-1;i++)
    {
        k=i;
        for(j=i+1;j<n;j++)
            if(strcmp(str[k],str[j])>0) k=j;
        if(k!=i) temp=str[i],str[i]=str[k],str[k]=temp;

    }

        

}   
void print(char *str[N][15],int n)
{
    int i;
    for(i=0;i<n;i++)
        printf("%s\n",str[i]);
    
}

请问不能够在sort函数中将char *str[N][15]变成str[]来比较str[1][]和str[2][]的大小呢?
应该怎样修改才能使输出的字符串按字符串的大小从大到小输出呢?(必须要用指针编程实现,要求如题,请高手帮忙解决下难题!)

回复列表 (共1个回复)

沙发

不好意思lz,没仔细看你的代码,头大。根据你的大致要求简单写了一份。
请注意注释处。
[code=c]
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_STR 16
#define N 3

void print(char (*s)[MAX_STR] , int n);
void sort(char (*s)[MAX_STR] , int n);

int main(int argc, char *argv[])
{
    int index;
    char str[N][MAX_STR];
    for(index = 0; index < N ;index++)
    {
       printf("请输入第%d个字符串:\n",index+1);
       fgets(str[index] , MAX_STR , stdin);
    }
    sort(str,N);
    print(str,N);
    return 0;
}

void sort(char (*s)[MAX_STR],int n)
{
   int i , j;
   char *temp =(char *)malloc(sizeof(char ) * MAX_STR) ;
   for(i = 0; i < n-1 ; i++)
   {
      for(j = i+1; j < n ; j++)
      {
         if(strcmp(s[i] , s[j]) > 0)         [color=800000]//这里的排序不能用s[i] = s[j],错误:incompatible types in assignment [/color]         
        {
            strcpy(temp,s[i]);
            strcpy(s[i],s[j]);
            strcpy(s[j],temp);
         }
      }
   }
   free(temp); 
}

void print(char (*s)[MAX_STR],int n)
{
   int i;    
   for(i = 0; i < n ; i++)
   {
      printf("%s",s[i]);
   }
}[/code]

我来回复

您尚未登录,请登录后再回复。点此登录或注册