天哪,实在想不懂哪错了,要抓狂了
#include <stdio.h>#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
#define A 128
#define B 50
bool str_in(char **p);
void str_pai(char*p[],int n);
void str_lie(char **p1,char **p2);
void str_out(char*p[],int n);
int main(void)
{
int count=0;
char *pS[B]={NULL};
printf("请输入文本:\n\n");
for(count=0;count<B;count++)
if(!str_in(&pS[count]))
break;
str_pai( pS,count);
str_out( pS,count);
return 0;
}
bool str_in(char **p)
{
char buffer[A];
if(gets(buffer)==NULL)
{
printf("读取失败\n");
exit(1);
}
if(buffer[0]=='\0')
return false;
*p=(char*)malloc(strlen(buffer)+1);
if(*p==NULL)
{
printf("内存失败,程序终止\n");
exit(1);
}
strcpy(*p,buffer);
return true;
}
void str_pai( char *p[],int n)
{
int i=0;
bool answer=false;
while(!answer)
{
answer=true;
for(i=0;i<n;i++)
{
if(strlen(p[i])<strlen(p[i+1]))
{
str_lie(&p[i],&p[i+1]);
answer=false;
}
}
}
}
void str_lie(char **p1,char **p2)
{
char *pt=*p1;
*p1=*p2;
*p2=pt;
}
void str_out(char *p[],int n)
{
int i=0;
printf("你的输出按字母顺序排列如下:\n");
for(i=0;i<n;i++)
{
printf("%s\n", p[i]);
free(p[i]);
p[i]=NULL;
}
}