黑马程序员技术交流社区

标题: 字符串排序问题。(C语言) [打印本页]

作者: gxppq    时间: 2014-12-18 15:16
标题: 字符串排序问题。(C语言)
     从键盘输入6个字符串(仅仅包含英文字母和数字),对这6个字符串从小到大排列并输出结果。(C语言)
     上面是我基础测试中的一个题。我编写的代码如下:
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main()
  4. {
  5.         int i,j;
  6.         char a[6][100];
  7.         char temp[100];
  8.         for(i=0;i<=5;i++)   //Input six string.
  9.         {
  10.                 printf("Please input the %dth string(within 100 words).\n",i+1);
  11.                 gets(a[i]);
  12.         }
  13.         printf("\nThe original six string:\n");
  14.     for(i=0;i<=5;i++)      /*Output the original six string.*/
  15.                 printf("%s\n",a[i]);
  16.        
  17.         for(i=0;i<=4;i++)   /*Sequence the 6 string with the method of select sort.*/
  18.         {
  19.                 for(j=i+1;j<=5;j++)
  20.                 {
  21.                         if(strcmp(a[i],a[j])>0)
  22.                         {//switch a[i] and a[j].
  23.                                 strcpy(temp,a[i]);
  24.                                 strcpy(a[i],a[j]);
  25.                                 strcpy(a[j],temp);
  26.                         }
  27.                 }
  28.         }
  29.         printf("\nThe six string after Sequence:\n");
  30.     for(i=0;i<=5;i++)                /*Output the six string after Sequence.*/
  31.                 printf("%s\n",a[i]);
  32.         return 0;
  33. }
复制代码


这么写的运行结果是对的。代码中第6行(char a[6][100];)对数组a的定义我用的是a[6][100]。在字符串的输入过程中只有6个,也就是按理说我只有定义a[5][100]就够了,0,1,2,3,4,5分别存放一个字符串。但是我写成a[5][100]时运行的结果不对。例如,我依次输入ff,ee,dd,cc,bb,aa这六个字符串。如果用a[6][100],运行的结果是aa,bb,cc,dd,ee,ff,这个结果是对的。但是如果用a[5][100],运行的结果中会出现一些奇怪的符号。那位大神可以给指导一下是那里出了问题。多谢了~
作者: 从今以后    时间: 2014-12-18 16:47
定义数组时char a[6]; 但是实际上数组元素只有a[0] a[1] a[2] a[3] a[4] a[5] 共6个下标到5 你用a[5]只有五个,第六个是越界状态,都是些不确定的垃圾数据
作者: gxppq    时间: 2014-12-19 09:20
恩恩,对的对的。晕了,定义数组时定义的是个数,不是下标。多谢了~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2