C语言中 字符串怎么排序

Python020

C语言中 字符串怎么排序,第1张

直接借助冒泡排序,选择排序即可进行字符串的排序,但是需注意的是,字符串的比较需要借助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)

}