关于用指针数组将字符串排序的问题

lanshanwoaini 2010-09-18 05:33:07
最近在编一个小程序时用到了指针数组,但是不知道为什么错了,程序题目是这样的:
从键盘上输入5个字符串(约定:每个字符串中字符数≤80字节),对其进行升序排序并输出。
  程序中不能使用库函数stpcpy、strcat、strncat、strncpy、memcpy、strcpy、memicmp、memcmp、stricmp、strncmp、strncmpi、strnicmp、strcmp和strcmpi或使用同名的变量、函数、单词。
我写的程序如下,基本思路是用指针数组来解决,(排序是指按ASCLL值来排),我写的程序如下,请大家帮我看看,那个输入那里就有错,还有就是结果,谢谢:
#include "stdio.h"
void main()
{ void jiaohuan(char *b[],int n);
int bijiao(char *p1,char *p2);
char *a[5];
char m[5][80];
int i;
printf("请输入5个字符串:\n");
for(i=0;i<5;i++)
scanf("%s",a[i]);
jiaohuan(a,5);
for(i=0;i<5;i++)
printf("%s\n",a[i]);
}
void jiaohuan(char *b[],int n)
{
char *p;
int i,j,k;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(bijiao(b[k],b[j])>0)k=j;
if(k!=i)
{p=b[i];b[i]=b[k];b[k]=p;}
}
}
int bijiao(char *p1,char *p2)
{
int i;
while(*p1&&*p2)
{
if(*p1>*p2){return 1;break;}
if(*p1<*p2){return 0;break;}
p1++;
p2++;}
}


...全文
546 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
thegreatone 2010-09-20
  • 打赏
  • 举报
回复
有三个错误:1、char *a[5]只定义了一个指针数组,因为你并不没有给指针赋值,所以都是野指针,这就是为什么你输入的时候出错的原因;2、jiaohuan和bijiao函数首先要main函数前面声明;3、jiaohuan函数里面的指针本身都是野指针,交换没有意义。下面是我的修改后的代码,仅供参考:
#include <stdio.h>
#include <string.h>

int bijiao(char *p1,char *p2);
void jiaohuan(char (*b)[80],int n);
void main()
{
int bijiao(char *p1,char *p2);
//char *a[5];
char m[5][80];
int i;
printf("请输入5个字符串:\n");
for(i=0;i<5;i++)
scanf("%s",m[i]);
jiaohuan(m,5);
for(i=0;i<5;i++)
printf("%s\n",m[i]);
}
void jiaohuan(char (*b)[80],int n)
{
char temp[80];
for(int i=0;i<n-1;i++)
{
for(int k=i+1;k<n;k++)
{
if(bijiao(b[i],b[k]))
{
strcpy(temp,b[i]);
strcpy(b[i],b[k]);
strcpy(b[k],temp);
}
}
}

}
int bijiao(char *p1,char *p2)
{
int i;
while(*p1&&*p2)
{
if(*p1>*p2){return 1;}
if(*p1<*p2){return 0;}
p1++;
p2++;
}
}
Polyglot_g 2010-09-20
  • 打赏
  • 举报
回复
#include <stdio.h>
int bijiao(char *p1,char *p2);
int main()
{

int bijiao(char *p1,char *p2);
void jiaohuan(char *b[],int n);

char *a[5];
char m[5][80];
int i;
printf("请输入5个字符串:\n");
for(i=0;i<5;i++)
scanf("%s",m[i]);
for(i=0;i<5;i++)
a[i]=m[i];
jiaohuan(a,5);
for(i=0;i<5;i++)
printf("%s\n",a[i]);
}


void jiaohuan(char *b[],int n)
{

char *p;
int i,j,k;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(bijiao(b[k],b[j])>0)k=j;
if(k!=i)
{p=b[i];b[i]=b[k];b[k]=p;}
}
}

int bijiao(char *p1,char *p2)
{

while(*p1&&*p2)
{
if(*p1>*p2){return 1;break;}
if(*p1<*p2){return 0;break;}
p1++;
p2++;}
return 1;
}
firstfans 2010-09-20
  • 打赏
  • 举报
回复
*a[5]没指定那个数组
缺少a=m;的赋值
houwenqiang 2010-09-20
  • 打赏
  • 举报
回复
你的定义是char* a[5];
是一个字符指针数组,在使用前必须为每一个元素赋值才能行。a[i] = new char[81];
lanshanwoaini 2010-09-20
  • 打赏
  • 举报
回复
还是不行啊,好像是内存错误,但是不知道是哪里错了,就在输入那里就错了直接用“ for(i=0;i<5;i++)
gets(b[i]);”
也不对,不能正确地读入数据
dingshaofengbinbin 2010-09-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 thegreatone 的回复:]
有三个错误:1、char *a[5]只定义了一个指针数组,因为你并不没有给指针赋值,所以都是野指针,这就是为什么你输入的时候出错的原因;2、jiaohuan和bijiao函数首先要main函数前面声明;3、jiaohuan函数里面的指针本身都是野指针,交换没有意义。下面是我的修改后的代码,仅供参考:
#include <stdio.h>
#include <string.h>

int b……
[/Quote]
正解!!!
旭子 2010-09-18
  • 打赏
  • 举报
回复
楼上都对!
dingshaofengbinbin 2010-09-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kyzy_yy_pm 的回复:]
scanf("%s",&a[i]);
[/Quote]
LZ这是个问题...
kyzy_yy_pm 2010-09-18
  • 打赏
  • 举报
回复
scanf("%s", 必须是指针类型的);

而楼主的却不是
kyzy_yy_pm 2010-09-18
  • 打赏
  • 举报
回复
scanf("%s",&a[i]);

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧