直接借助冒泡排序,选择排序即可进行字符串的排序,但是需注意的是,字符串的比较需要借助strcmp函数完成,而字符串的复制需要借助strcpy函数完成。
示例代码如下:
#include "stdio.h"#include "string.h"
void sort(char array[][20],int n)
main(void)
{
char str[10][20]
int i,j,k,n
printf("input n (n<=10):")
scanf("%d",&n)
printf("input %d string:",n)
for(i=0i<ni++)
gets(str[i]) //输入N个字符串
sort(str,n) //对输入的字符串排序
printf("sort string:\n")
for(i=0i<ni++)
puts(str[i])
return 0
}
void sort(char array[][20],int n) //定义排序函数
{
char temp[20]
int i,j,k
for(i=1i<n-1i++)
{
k=i
for(j=i+1j<nj++)
if(strcmp(array[k],array[j])>0)
k=j
if(k!=i)
{
strcpy(temp,array[i]) //字符串交换顺序
strcpy(array[i],array[k])
strcpy(array[k],temp)
}
}
}
你有两个错误,一是C的变量定义必须在所有语句之前,二是字符串不能赋值,必须使用strcpy函数,修改后的程序代码和运行结果如下:$ cat a.c
#include<stdio.h>
#include<string.h>
void Solve()
void sort(char *name[], int n)
int main()
{
Solve()
return 0
}
void Solve()
{
int i,n
char name[100][100]
scanf("%d",&n)
for(i=0i<ni++)
{
gets(name[i])
}
sort(name,n)
for(i=0i<ni++)
{
puts(name[i])
}
}
void sort(char *name[100], int n)
{
int i,j,k
char *temp
for(i=0i<n-1i++)
{
k=i
for(j=i+1j<nj++) if(strcmp(name[k],name[j])>0) k=j
if (k!=i)
{
{
strcpy(temp,name[i])
strcpy(name[i],name[k])
strcpy(name[k],temp)
}
}
}
}
$ cc a.c
"a.c", line 19: warning #2167-D: argument of type "char (*)[100]" is
incompatible with parameter of type "char **"
sort(name,n)
^
$ a.out
6dkjlfhgjkshdfjkgh
1kdfghj
3dkjfhghd
2dlkfjgklj
5ldfkhlkj
4dflkghklj
1kdfghj
3dkjfhghd
2dlkfjgklj
5ldfkhlkj
4dflkghklj
$ cc -V
cc: HP C/aC++ B3910B A.06.25 [Nov 30 2009]
/cq/u/cqjsdba/ygb>
你代码里有好多错误啊少分号
少个大括号
关键还有
n没定义
n
是表示字符串长度么
#include
<stdio.h>
#include
<string.h>
void
fun(char
*
a)
{
int
i,j
char
ch
//求出字符串有多少个元素
int
n=strlen(a)
for(i=0i<ni++)
//冒泡排序法
for(j=0j<n-1j++)
{
if(a[j]>a[j+1])
//升序
{
ch=a[j]
a[j]=a[j+1]
a[j+1]=ch
}
}
}
void
main
()
{
char
a[81]
printf("输入a:\n")
scanf("%s",a)
fun(a)
printf("结果是:\n")
printf("%s\n",a)
}