#include<stdio.h>
#include<string.h>
void sort(char *s[10])
{
int i,j;
for(i=0;i<10;i++)
{
for(j=i;j<10;j++)
{
if(strcmp(s[i],s[j])>0)
{
char *temp=s[i];
s[i]=s[j];
s[j]=temp;
}
}
}
}
int main()
{
char *str[10];
printf("Please enter ten strings:\n");
for(int i=0;i<10;i++)
{
str[i]=malloc(32);
scanf_s("%s",str[i],32);
}
sort(str);
printf("\n");
for(int i=0;i<10;i++)
{
printf("%s\n",str[i]);
free(str[i]);
}
system("pause");
return 0;
}
这是谭浩强《C语言程序设计》第五版给的答案,我的电脑编译一直过不了;另外我是非计算机专业的,没学过malloc()这样的东西,代码应该怎样改?
直接改你的程序吗?
咳咳咳,紧急修复
void sort(char* string[10])
{
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
if (compare(string[j], string[j + 1]) == 1)
{
char* str = string[j + 1];
string[j + 1] = string[j];
string[j] = str;
}
}
}
}
// 比较字符串大小
int compare(char* str1, char* str2)
{
unsigned short result = 0;
for (unsigned int turn = 0; result == 0; turn++)
{
//判断是否为空
if (str1[turn] == '\0')
result = 2;
else if (str2[turn] == '\0')
result = 1;
else
{
//判断是否相等
if (str1[turn] == str2[turn])
result = 0;
else
result = (str1[turn] > str2[turn]) ? 1 : 2;
}
}
return result;
}
else
result = (str1[turn] > str2[turn]) ? 1 : 2;
}
}
return result;
}