当前位置:首页 » 编程语言 » c语言对字符串中元素的排序
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言对字符串中元素的排序

发布时间: 2023-03-09 07:04:25

c语言字符串排序

你有两个错误,一是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=0;i<n;i++)
{
gets(name[i]);
}
sort(name,n);
for(i=0;i<n;i++)
{
puts(name[i]);
}
}
void sort(char *name[100], int n)
{
int i,j,k;
char *temp;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++) 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语言字符串排序

#include&lt;stdio.h&gt;

#include&lt;string.h&gt;

#define SIZE 91

#define LIM 31

#define HALT""

void stsrt(char*strings[],int num);

int main(void)

{

char input[LIM][SIZE];

char*ptstr[LIM];

int ct=0;

int k=0;

printf("input up to%d lines,and I will sort them. ",LIM);

printf("To stop,press the enter key at a line's start. ");

while(ct&lt;LIM&&gets_s(input[ct],100)!=NULL&&input[ct][0]!='')

{

ptstr[ct]=input[ct];

ct++;

}

stsrt(ptstr,ct);

puts(" here's the sorted list: ");

for(k=0;k&lt;ct;k++)

{

puts(ptstr[k]);

}

puts(" here's the list: ");

for(k=0;k&lt;ct;k++)

{

puts(input[k]);

}

return 0;

}

void stsrt(char*strings[],int num)

{

char*temp;

int top,seek;

for(top=0;top&lt;num-1;top++)

{

for(seek=top+1;seek&lt;num;seek++)

{

if(strcmp(strings[top],strings[seek])&gt;0)

{

temp=strings[top];

strings[top]=strings[seek];

strings[seek]=temp;

}

}

}

(2)c语言对字符串中元素的排序扩展阅读:

printf函数使用注意事项

1、域宽

%d:按整型数据的实际长度输出。

如果想输出指定宽度可以指定域宽,%md--&gt;m域宽,打印出来以后,在控制台上,显示m位;

如果我们要打印的数的位数如果超过我们设定m则原样输出;

如果我们要打印的数的位数如果小于我们设定的位数,则补空白,具体如下:

如果m为正数,则左对齐(左侧补空白);

如果m为负数,则右对齐(右侧补空白)。

2、转义字符

如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示。

如:printf("%f%%",1.0/3);输出结果:0.333333%。

㈢ c语言字符排序

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
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 = 0; i < 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 = begin; i <= end; i++) {
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;
}
}

㈣ C语言 字符串排序的规则是什么就是字符串排序是什么意思

我想楼主问的是排序规则吧,把字符串当成一个整体,最常用的是这样的规则(以升序为例):
从字符串的第一个字符开始比较,如果相等就比较后一个;如果不等,就将“小”的那一个放在“大”的前面,这里的大小指的是按照字母表的顺序(实际上比较的是ASCII码值)。
例如:两个字符串"xyh","abc"
先比较第一个字符:字母表中x是大于a的,所以升序排序的话就是
"abc"
"xyz"
不知道我说的清楚不?希望能帮到你

㈤ c语言 字符串排序

/*字符串冒泡排序,以输入的字符串为空格为结束*/
#include <stdio.h>
#include <string.h>
#define MAXNUM 5
#define MAXLEN 20
main()
{
char s1[MAXNUM][MAXLEN],max[MAXLEN];
int num=1,i,j,exchange;

for (i=0;i<num;(i++,num++))
{
printf("请输入第%d个国家名字:\n",i+1);
gets(s1[i]);
if(s1[i][0]==32) break;
}
strcpy(max,s1[0]);
puts(max);

for (i=0;i<num-2;i++)/*这里开始就是冒泡排序 */
{
exchange=0;
for(j=0;j<num-2;j++)
if (strcmp(s1[j],s1[j+1])>0)
{
strcpy(max,s1[j]);
strcpy(s1[j],s1[j+1]);
strcpy(s1[j+1],max);
exchange=1;
}

if(!exchange)
break;
}
printf("按大小输出国家名字:");
for (i=0;i<num-1;i++)
printf("%s\n",s1[i]);
getch();
}
退出循环应用break而不能用return
冒泡2次循环都应该从头到尾,或者从尾到头,不能一正一反

㈥ C语言字符串排序

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define MAX 10

void stsrt(char *str[],int num);
void ASC(char *str[],int num);
void length_add(char *str[],int num);
void word_length(char *str[],int num);

int main(void) {
char *s[MAX],t[80];
int i = 0,n;
printf("输入%d个字符串 :\n",MAX);
for(i = 0; i < MAX; ++i) {
if(gets(t) && t[0] != '\0') {
s[i] = (char *)malloc(80 * sizeof(char));
strcpy(s[i],t);
}
else break;
}
while(i < MAX && gets(s[i]) && s[i][0] != '\0') i++;
puts("选择:");
puts("1.输出初始字符串行表");
puts("2.按ASCⅡ码顺序输出字符串");
puts("3.按长度递增顺序输出字符串");
puts("4.按字符串第一个单词长度输出字符串");
puts("5.结束");
while(scanf("%d",&n) != 5) {
switch(n) {
case 1:stsrt(s,i);break;
case 2:ASC(s,i);break;
case 3:length_add(s,i);break;
case 4:word_length(s,i);break;
case 5:return 0;
default:puts("输入错误!");
}
}
return 0;
}

void stsrt(char *str[],int num) { //1.输出初始字符串行表
int n;
for(n = 0;n < num;n++) puts(str[num]);
}

void ASC(char *str[],int num) {//2.按ASCⅡ码顺序输出字符串
int top,seek;
char *temp;
for(top = 0;top < num - 1;top++) {
for(seek = top + 1;seek < num;seek++)
if(strcmp(str[top],str[seek]) > 0) {
temp = str[top];
str[top] = str[seek];
str[seek] = temp;
}
}
for(int n = 0;n < num;n++) puts(str[n]);
}

void length_add(char *str[],int num) { //3.按长度递增顺序输出字符串
char *temp;
int top,seek;
for(top = 0;top < num - 1;top++) {
for(seek = top + 1;seek < num;seek++)
if(strlen(str[top]) > strlen(str[seek])) {
temp = str[top];
str[top] = str[seek];
str[seek] = temp;
}
}
for(int n = 0;n < num;n++) puts(str[n]);
}

void word_length(char *str[],int num) {//4.按字符串第一个单词长度输出字符串
char *temp;
int top,seek,n,j,len[MAX];
for(n = 0; n < num; ++n) {
len[n] = 0;
j = 0;
while((str[n][j] != ' ') && str[n][j]) {
++len[n];
++j;
}
}
for(top = 0;top < num - 1;top++) {
for(seek = top + 1; seek < num;seek++) {
if(len[top] > len[seek]) {
temp = str[top];
str[top] = str[seek];
str[seek] = temp;
}
}
}
for(n = 0;n < num;n++) puts(str[n]);
}

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

#include<stdio.h>

#include<string.h>

int main()

{

int j,k,i,t,n;

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

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

{

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

}

n=strlen(s[1]);

k=0;

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

{

for(j=0;j<9-i;j++)

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

{

for(k=0;k<n;k++)

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

for(k=0;k<n;k++)

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

for(k=0;k<n;k++)

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

}

}

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

{

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

}

return 0;

}

运行效果:

(7)c语言对字符串中元素的排序扩展阅读:

scanf函数用法:

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

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

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

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

㈧ 用C语言对字符串分类排序

加点分吧,我花了一个多小时啊
#include"stdio.h"
char d[20],e[20],f[20];
void sort(char s[])
{
int i,j,k,len=0;
char t;
while(s[len])len++;
for(i=0;i<len-1;i++)
{
k=i;
for(j=i+1;j<len;j++)
if(s[k]>s[j])k=j;
if(k!=i)
{
t=s[i];
s[i]=s[k];
s[k]=t;
}
}
}
void fun(char *p)
{
char *a,*b,*c,g[30];
int i,j,k;
a=d;
b=e;
c=f;
for(;*p!='\0';p++)
{
if(*p>='A'&&*p<='Z')
*a++=*p;
else if(*p>='a'&&*p<='z')
*b++=*p;
else
*c++=*p;
}
*a='\0';
*b='\0';
*c='\0';
sort(d);
sort(e);
sort(f);
p=g;
i=j=k=0;
while(*p++=d[i++]);
p--;
while(*p++=e[j++]);
p--;
while(*p++=f[k++]);
*p='\0';
puts(g);
}
void main()
{
char s[30];
void fun(char *p);
void sort(char *q);
gets(s);
fun(s);

}

㈨ 字符串排序 C语言

main()
{
int n,i,j;
char str[10][20];
char t[20];
scanf("%d",&n);
getchar();
for(i=0; i<n; i++)
gets(str[i]);
for(i=0;i<n;i++)
for(j=0;j<n-i-1;j++)
if(strcmp(str[j],str[j+1]) > 0 )
{strcpy (t,str[j] );
strcpy (str[j],str[j+1]);
strcpy (str[j+1],t);
}
for(i=0;i<n;i++)
puts(str[i]);
}
因为你首先输入了一个数字,后面使用gets函数的时候,将第一行的数字也读入,所以会少一个输入,在原来的scanf函数后加一个getchar()函数吸收这个值。