指针数组之字符串排序问题,怎么有一个一直不对呢?
本帖最后由 小泉向西流 于 2014-5-30 19:55 编辑#include<stdio.h>
#include<string.h>
void main()
{
void sort(char *name[], int n);
void print(char *name[], int n);
char *name[]={"Follow me", "BASIC", "Great Wall", "FORTRAN", "EAda", "EA","CBD"};
int n=7;
sort(name,n);
print(name,n);
}
void sort(char *name[], int n)
{
char *temp;
int i,j,k;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if( strcmp(name,name)>0 )
{
k=j;
}
if( k!=i)
{
temp=name;
name=name;
name=temp;
}
}
}
}
void print(char *name[], int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%s\n", name);
}
}
参见视频 《小甲鱼 C语言 (新版)》 第八章08集 , 总第048集。
讲的是指针数组的运用。
题目, 将若干字符串按字母顺序(由小到大)输出。
但实验结果一直不对。
字符串“CBD” 的位置不对,其他几个又是按顺序排列输出的。 不知道为什么,求解。
额。。你的排序算法有问题。。。我修改了一下#include<stdio.h>
#include<string.h>
int main()
{
void sort(char *name[], int n);
void print(char *name[], int n);
char *name[]={"Follow me", "BASIC", "Great Wall", "FORTRAN", "EAda", "EA","CBD"};
int n=7;
sort(name,n);
print(name,n);
return 0;
}
void sort(char *name[], int n)
{
char *temp;
int i,j,k;
for(i=n-1;i>=0;i--)
{
//k=i;
for(j=0;j<i;j++)
{
/* if( strcmp(name,name)>0 )
{
k=j;
}
if( k!=i) ///////
{
temp=name;
name=name;
name=temp;
}
*/
if( strcmp(name,name)>0 )
{
temp=name;
name=name;
name=temp;
}
}
}
}
void print(char *name[], int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%s\n", name);
}
}
#include<stdio.h>
#include<string.h>
void main()
{
void sort(char *name[], int n);
void print(char *name[], int n);
char *name[]={"Follow me", "BASIC", "Great Wall", "FORTRAN", "EAda", "EA","CBD"};
int n=7;
sort(name,n);
print(name,n);
}
void sort(char *name[], int n)
{
char *temp;
int i,j;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if( strcmp(name,name)>0 )
{
temp=name;
name=name;
name=temp;
}
}
}
}
void print(char *name[], int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%s\n", name);
}
}
加入了K, 为什么就不对呢?
elvo 发表于 2014-5-30 20:19 static/image/common/back.gif
额。。你的排序算法有问题。。。我修改了一下
两个for循环的思路没有错,如3楼
但为什么加入了一个 K的判断, 整体就不对呢 小泉向西流 发表于 2014-5-30 21:10 static/image/common/back.gif
两个for循环的思路没有错,如3楼
但为什么加入了一个 K的判断, 整体就不对呢
额。。。最开始的那个code,若某一次改变了k的值,则回一直进入if( k != i)这个判断里。。。比如说i=0时,j=1就改变k的值,让k=1,则一直进入if(k!= i)的判断体中,每次都要替换一次name和name,恩,i=0时,k的最后改变值是6,则name和name替换,所以CBD会在第一个。。。
页:
[1]