搜索
首页 电脑/网络 程序设计 C/C++

字符数组问题

  问一个关于字符数组的问题 下面是用冒泡法对一串字符从小到大排序的代码 #include #define N 10 void sort(char a[]) { int i,j; char t; for (i=0;ia[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } } void main() { int i; char array[10]; for (i=0;i<=9;i++) scanf("%c",&array[i]); sort(array); for (i=0;i<=9;i++) printf("%c",array[i]); } 在sort函数中 的i 变量只是表示外层循环次数应该和数组没什么关系 但是发现 当循环初值小于1时(如代码中的 i=0~9)结果中会出现非字母符号如输入:reputation 则结果是Σaeinoprtt 若i=1 to 10 则得正解reputation 我用来调试的是TC2。
  0请问这是什么原因?。

全部回答

2006-09-19

0 0
与i没啥关系,把下面这句改一下 for (j=0;(j<N-i) && (a[j]!='\0');j++) 改成 for (j=0;(j<N-i-1) && (a[j]!='\0');j++) 程序就可以正常运行了,主要是后面有a[j+1],当j为N-1时越界了。 另外,你的程序里面并没有给字符数组a赋任何'\0',所以这个判断挺别扭的。

2006-09-19

49 0
  原因是这样的: 如果是冒泡法对10个字母排序,那么理论上第一次需要比较9次,但如果按照你的写法,for (j=0;(j<N-i) && (a[j]!='\0');j++) 因为第一遍i=0;所以相当于j<10,这样就相当于比较了10遍了,同理每次比较都比较了多一次,相当于对11个字母就行排序了。
  这样因为数组最后的字母是回车,而回车的ASCII码比字母小,所以第一个输出就不是你想看到的了。

类似问题换一批

热点推荐

热度TOP

相关推荐
加载中...

热点搜索 换一换

电脑/网络
C/C++
硬件
电脑装机
程序设计
互联网
操作系统/系统故障
笔记本电脑
反病毒
百度
软件
程序设计
C/C++
VB
数据库
汇编语言
JAVA相关
VC++
C#/.NET
其他编程语言
C/C++
C/C++
举报
举报原因(必选):
取消确定举报