当前位置: 代码迷 >> C语言 >> [求助]为什么我的只冒一次泡??
  详细解决方案

[求助]为什么我的只冒一次泡??

热度:282   发布时间:2006-05-10 18:35:00.0
[求助]为什么我的只冒一次泡??

题目:输入多个城市的名字,按冒泡法排列好输出
我自己写了,但是只能排列一次。。高手指教

#include<stdio.h>
#include<string.h>
#define CITYNUM 5
void main()
{
int i,j,k,num;
char city[CITYNUM][20];
char str[80];

num=0;
for (i=0;i<CITYNUM;i++)
{
printf("input the name of the %dth city:",i+1);
gets(str);
if (str[0]==0)
break;
if (strlen(str)>19)
{
i--;
continue;
}
strcpy(city[i],str);
num++;
}

for (i=1;i<num;i++)
{
for (j=0;j<num-i;j++)
if ( stricmp ( city[j],city[j+1] )>0 )
{
strcpy(str,city[i]);
strcpy(city[i],city[k]);
strcpy(city[k],str);
}
for (i=0;i<CITYNUM;i++)
printf("%s\n",city[i]);
}
}


我试了好多次。。米办法了。。高手指教下。。谢谢

搜索更多相关的解决方案: include  

----------------解决方案--------------------------------------------------------


----------------解决方案--------------------------------------------------------

#include <stdio.h>
#include <conio.h>
#include <string.h>
#define N 5

static void BubbleSort(char str[][30]);

int main(void)
{
char str[N][30];
int i;

printf("Enter five city name: ");
for (i = 0; i < N; i++)
{
gets(str[i]);
}

BubbleSort(str);

for (i = 0; i < N; i++)
{
puts(str[i]);
}

getch();
return 0;
}/* main */

static void BubbleSort(char str[][30])
{
char temp[30];
int i, j;

for (i = 1; i < N; i++)
{
for (j = 0; j < N - 1; j++)
{
if (strcmp(str[j], str[j + 1]) > 0)
{
strcpy(temp, str[j]);
strcpy(str[j], str[j + 1]);
strcpy(str[j + 1], temp);
}
}
}
}/* BubbleSort */




----------------解决方案--------------------------------------------------------
楼主你的程序挺乱的,我建议改用指针
----------------解决方案--------------------------------------------------------
我倒,指针有数组清晰吗,美女
----------------解决方案--------------------------------------------------------

指针优势很多,只不过没有数组那么好用而已,而且不用限定每个字符串的位数,增加了灵活度,而且数组比较浪费空间


----------------解决方案--------------------------------------------------------
我更倒,你从那里能看出数组浪费空间啊
----------------解决方案--------------------------------------------------------
指针也就是动态分配,你怎么不限定字符个数啊
----------------解决方案--------------------------------------------------------
以下是引用论坛在2006-5-10 19:26:00的发言:
指针也就是动态分配,你怎么不限定字符个数啊

指针并不一定是动态分配,你看定义的二维数组都有下限的,最大是为20不是吗,如果没有20位,那不就浪费了吗,你看看指针那一章吧,自然会明白


----------------解决方案--------------------------------------------------------

我还没学到指针。。
不过问题解决了。。谢谢大家
我把正确的贴出来
#include<stdio.h>
#include<string.h>
#define CITYNUM 5
void main()
{
int i,j,num;
char city[CITYNUM][20];
char str[80];

num=0;
for (i=0;i<CITYNUM;i++)
{
printf("input the name of the %dth city:",i+1);
gets(str);
if (str[0]==0)
break;
if (strlen(str)>19)
{
i--;
continue;
}
strcpy(city[i],str);
num++;
}

for (i=0;i<num;i++)
{
for (j=i+1;j<num;j++)
if ( stricmp ( city[i],city[j] )>0 )
{
strcpy(str,city[i]);
strcpy(city[i],city[j]);
strcpy(city[j],str);
}
}
for (i=0;i<CITYNUM;i++)
printf("%s\n",city[i]);
}


----------------解决方案--------------------------------------------------------
  相关解决方案