回 帖 发 新 帖 刷新版面

主题:[讨论]一道字符串题!(帮忙瞧一瞧)

题目:输入3个字符串,进行从小到大排列???
#include<stdio.h>
#include<string.h>
void main()
{int i,j;
char *p,a[3][20],*t;
printf("请输入3个字符串:\n");
p=*a+j;
for(i=0;i<3;i++)
gets(a[i]);
printf("\n");
for(i=0;i<2;i++)
  for(j=0;j<2-i;j++)
      if(strcmp(*a+j,*a+j+1)>0)
      {strcpy(t,*a+j);
      strcpy(*a+j,*a+j+1);
      strcpy(*a+j+1,t);
      }
printf("输出从大到小的字符串:\n");
p=*a+j;
for(i=0;i<3;i++)
  puts(a[i]);
}
这个程序运行是能运行,但是,输入了就是不显示从小到大排列了(只显示我输入的那个3个字符串了)我就有些不理解了!!! 郁闷
请求指点!!!
[em1][em2][em2][em2][em2][em1]

回复列表 (共5个回复)

沙发

 p=*a+j;
j是什么? 没有初始化

板凳


[code=c]
#include<stdio.h>
#include<string.h>
void main()
{int i,j;
char *p,a[3][20],t[20]={};
printf("请输入3个字符串:\n");
//p=*a+j; 这个好像一点用也没 j也没有初始少
for(i=0;i<3;i++)
    gets(a[i]);
printf("\n");
for(i=0;i<2;i++)
    for(j=0;j<2-i-1;j++)//这里条件由j<2-i改为j<2-i-1 不然后i=0时 会有j=2 *a+j+1会下标越界
        if(strcmp(*a+j,*a+j+1)>0)
        {strcpy(t,*a+j);
         strcpy(*a+j,*a+j+1);
         strcpy(*a+j+1,t);
        }
printf("输出从大到小的字符串:\n");
//p=*a+j; 这个好像一点用也没
for(i=0;i<3;i++)
    puts(a[i]);
}
[/code]

3 楼

//p=*a+j; 这个好像一点用也没 j也没有初始少
//如果前面定义时把j=0时,p=*a+j;这个时候不是指向二位数组的首地址吗?
然后,我在最后输入的时候,再把指向,又调到首地址了,来进行输出,???
我说的对不对??? 请指点???
for(i=0;i<2;i++)
    for(j=0;j<2-i-1;j++)//这里条件由j<2-i改为j<2-i-1 不然后i=0时 会有j=2 *a+j+1会下标越界
我的3个字符串进行比较,我用的是冒泡发
你这个j<2-i-1,在比较时:J+1就不行了???
我是这样理解的,望指点,我有些不会了!!!呵呵

4 楼

数组 a[j]=*(a+j)

5 楼

你好.我是全职网赚工作者.
如果你有时间有电脑.
想在网络上创业.请联系我..
项目绝对真实.详情QQ空间资料
加盟请联系 QQ908889846

我来回复

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