C语言中如何将10个字符串进行排序

Python015

C语言中如何将10个字符串进行排序,第1张

#include<stdio.h>

#include<string.h>

int main()

{

int j,k,i,t,n

char s[10][10],b[10][10]

for(i=0i<10i++)

{

scanf("%s",s[i])

}

n=strlen(s[1])

k=0

for(i=0i<9i++)

{

for(j=0j<9-ij++)

if(strcmp(s[j],s[j+1])>0)

{

for(k=0k<nk++)

b[j][k]=s[j][k]

for(k=0k<nk++)

s[j][k]=s[j+1][k]

for(k=0k<nk++)

s[j+1][k]=b[j][k]

}   

}

for(i=0i<10i++)

{

printf("%s ",s[i])

}

return 0

}

运行效果:

扩展资料:

scanf函数用法:

scanf("输入控制符",输入参数)

功能:将从键盘输入的字符转化为“输入控制符”所规定格式的数据,然后存入以输入参数的值为地址的变量中。

用scanf()函数以%s格式读入的数据不能含有空白符时,所有空白符都被当做数据结束的标志。所以题中函数输出的值只有空格前面的部分。

如果想要输出包括空格在内的所有数据,可以使用gets()函数读入数据。gets()函数的功能是读取字符串,并存放在指定的字符数组中,遇到换行符或文件结束标志时结束读入。换行符不作为读取串的内容,读取的换行符被转换为字符串结束标志'\0'。

你有两个错误,一是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>

c语言字符排序:

输入:abc 输出:abc acb bac bca cab cba

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

void mySwap(char *a,char *b)

{

char temp

temp = *a

*a = *b

*b = temp

}

void PaiLie(char *list,int begin,int end)

{

int i

if(list == NULL)

return

if(begin == end)

{

printf("%s ",list)

printf("\n")

}else{

for(i = begin i<=end i++)

{

mySwap(&list[i],&list[begin])

PaiLie(list,begin+1,end)

mySwap(&list[i],&list[begin])

}

}

}

void main()

{

char list[] = "abc"

char out [4]

PaiLie(list,0,2)

//ZuHe(list,out,3,0,0)

}

如果有重复,去掉重复的,然后满足一些特定的要求(如:第3个位置不可以是4,3和5不可以相邻)

Java实现。

此方法需要输入数字从小到大排列,若不是只需在排列之前预处理一下即可。

关键是compareTo方法

[java] view plain copy

package dataStruct

import java.util.LinkedList

import java.util.List

public class PaiLie {

private static List<String>result = new LinkedList<String>()

private static String lastResult = ""

public static void main(String[] args) {

String s = "1223"

char[] c = s.toCharArray()

paiLie(c, 0, c.length - 1)

for (int i = 0i <result.size()i++)

System.out.println(result.get(i))

}

public static boolean validator(String s) {

if (s.compareTo(lastResult) <= 0) //去重复的关键

return false

if (s.charAt(2) == '4')

return false

if (s.indexOf("35") >= 0)

return false

if (s.indexOf("53") >= 0)

return false

return true

}

public static void paiLie(char[] c, int begin, int end) {

if (begin == end) {

String s = new String(c)

if (validator(s)) {

lastResult = s

result.add(s)

}

}

for (int i = begini <= endi++) {

swap(c, begin, i)

paiLie(c, begin + 1, end)

swap(c, begin, i)

}

}

public static void swap(char[] c, int i, int j) {

char temp

temp = c[i]

c[i] = c[j]

c[j] = temp

}

}