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

C语言对一个字符串进行排序

发布时间: 2022-09-08 11:49:53

‘壹’ 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语言 字符串排序的规则是什么就是字符串排序是什么意思

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

‘叁’ C语言,字符串排序问题。。

没有大的问题,稍作调整:

#include<stdio.h>

#include<string.h>

int main()

{

char temp[256];

char string[6][256];

int i,j;

//提示输入6个字符串

printf("请依次输入6个字符串(包括英文字母和数字): ");

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

{

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

}

//字符串比较大小

for (i=0; i<6-1; i++)

{

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

{

//比较字符串大小,如果前面的字符串大,则返回1,否则返回0

if ((strcmp(string[j],string[j+1]))==1)

{

//调换两个字符串

strcpy(temp,string[j]);

strcpy(string[j],string[j+1]);

strcpy(string[j+1],temp);

}

}

}

//输出字符串

printf("排序完成的字符串如下: ");

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

{

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

}

getch();

return 0;

}

‘肆’ C语言中输入一串字符,怎样让它按照字母从小到大的顺序排列

这可以把字符串输入到字符数组中,然后采用排序的方法来实现:
(需要包含<string.h>头文件)
char t,s[200];
int i,i;
gets(s);
for(i=0;i<strlen(s)-1;i++)
for(j=0;j<strlen(s)-1-i;j++)
if(s[j]>s[j+1])
{t=s[j]; s[j]=s[j+1]; s[j+1]=t;}
puts(s);

‘伍’ 字符串排序 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;

}

}

}

(5)C语言对一个字符串进行排序扩展阅读:

printf函数使用注意事项

1、域宽

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

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

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

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

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

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

2、转义字符

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

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

‘陆’ 字符串排序 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()函数吸收这个值。

‘柒’ 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;

}

}

}

(7)C语言对一个字符串进行排序扩展阅读:

printf函数使用注意事项

1、域宽

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

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

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

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

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

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

2、转义字符

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

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

‘捌’ C语言如何在键盘中输入一个数字字符串并进行排序

楼主你好!

根据你的要求,我使用冒泡排序法,帮写个了程序,代码及运行结果如下!如果有不正确之处,请广大好手指正!谢谢!

#include<stdio.h>#include<string.h>

intmain(){

chara[100];

inti,j;

printf("请输入字符串: ");

scanf("%s",a);

for(i=0;i<strlen(a);i++)

for(j=0;j<strlen(a)-1-i;j++){

chartemp;

if(a[j]<=a[j+1]){

temp=a[j];

a[j]=a[j+1];

a[j+1]=temp;

}

}

printf("排序后的字符串: %s ",a);

return0;

}

希望我的回答对你有帮助!

‘玖’ 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;
}
}