c语言字符串排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言字符串排序相关的知识,希望对你有一定的参考价值。

C语言实验题——字符串排序
描述

输入3个字符串,按字典序从小到大进行排序。

输入

输入数据 有一行,分别为3个字符串,用空格分隔。

输出

输出排序后的三个字符串,用空格分隔。

样例输入

abcd cdef bcde

样例输出

abcd bcde cdef

最好能给我两种方法解得,普通的简单方法和指针方法??急求!!无限感激!!

#include<stdio.h>

#include<string.h>

#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.\\n",LIM);

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

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

ptstr[ct]=input[ct];

ct++;

stsrt(ptstr,ct);

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

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

puts(ptstr[k]);

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

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

puts(input[k]);

return 0;

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

char*temp;

int top,seek;

for(top=0;top<num-1;top++)

for(seek=top+1;seek<num;seek++)

if(strcmp(strings[top],strings[seek])>0)

temp=strings[top];

strings[top]=strings[seek];

strings[seek]=temp;

扩展资料:

printf函数使用注意事项

1、域宽

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

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

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

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

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

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

2、转义字符

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

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

参考技术A #include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
int comp(const void*,const void*);
main(int argc,char *argv[])
int i;
char *s[]="abcd","cbef","bcde";
int n=sizeof s/sizeof s[0];
qsort(s,n,sizeof s[0],comp);
for(i=0;i<n;i++)
printf("%s",s[i]);

int comp(const void*p1,const void*p2)

const char *ps1=*(const char**)p1;
const char *ps2=*(const char**)p2;
return strcmp(ps1,ps2);

调用c库中的qsort函数求解
参考技术B #include <string.h>
#include <stdio.h>

void Swap1(char s[3][128])

char tmp[128] = 0;
int i, j;
for (i = 0; i < 2; ++i)

for (j = 0; j < 2; ++j)

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

strcpy(tmp, s[j]);
strcpy(s[j], s[j+1]);
strcpy(s[j+1], tmp);





int main(void)

char s[3][128];
scanf(" %s %s %s", s[0], s[1], s[2]);
Swap1(s);
printf("%s %s %s\n", s[0], s[1], s[2]);
return 0;
本回答被提问者和网友采纳

c语言 向字符串中插入字符并排序

(1)从键盘用gets函数输入从小到大有序排列的字符串(不多于80个字符)后,再将字符‘k’插入其中,使其仍然有序。
如输入:acfhhlprsyz,则输出:acfhhklprsyz。
(2)从键盘输入一个所含字符从小到大有序排列的字符串(不多于40个字符)后,再输入一个字符插入其中,使其仍然有序,然后输出。例如:
输入:#255BKacfhhlprsyz
再输入:G
输出:#255BGKacfhhlprsyz

/*添加注释,排序子程序,插入子程序*/
#include<stdio.h>
#include<string.h>
/*交换两个字符子程序*/
void swap(char *num1,char *num2)

char ch;
ch = *num1;
*num1 = *num2;
*num2 = ch;

/*排序子程序由小及大*/
void pai_xu(char *p)

int i,j,len;
len = strlen(p);
for(i = 0;i < len -1;i++)
for(j = i+ 1;j < len;j++)
if(p[i] > p[j])swap(&p[i],&p[j]);



/*插入子程序,返回新字符串的长度*/
int cha_ru(char *src,char wait)

char *pointer;
int len;
len = strlen(src);
pointer = src + len + 1;
*pointer = '\0';
pointer -= 2;
while(pointer >= src)
if(*pointer >= wait) *(pointer+1) = *pointer;
else
*(pointer+1) = wait;break;

pointer--;

if(pointer < src) *(pointer+1) = wait;
return len+1;


/************************主函数*****************************/
int main(void)

char ch,a[80],*p;
int i,len;
printf("\n输入一个字符串:\n");
gets(a); /*输入字符串*/
pai_xu(a);/* 排序子程序*/
printf("%s\n",a);
printf("\n请输入待插入的字符:\n");
scanf("%c",&ch);
cha_ru(a,ch);
printf("\n%s\n",a);
return 0;
参考技术A #include "stdio.h"
#include "string.h"
void main()

char s[80];
char s2[81];
int j = 0,m =0;
gets(s);
for(int i = 0;i <=20;i++,j++)

if(s[i] > 'k' && m == 0)

s2[j] = 'k';
j++;
s2[j] = s[i];
m++;

else
s2[j] = s[i];

cout<<s2;


/////////////////////////////
#include "stdio.h"
#include "string.h"
#include "iostream.h"
void main()

char s[80];
char s2[81];
char s3;
int j = 0,m =0;
gets(s);
scanf("%c",&s3);
for(int i = 0;i <=20;i++,j++)

if(s[i] > s3 && m == 0)

s2[j] = s3;
j++;
s2[j] = s[i];
m++;

else
s2[j] = s[i];

cout<<s2;

以上是关于c语言字符串排序的主要内容,如果未能解决你的问题,请参考以下文章

c语言字符串排序

C语言问题:将一字符串按ASCII大小排序

C语言字符串排序

Go语言 排序与搜索切片

求c语言高手,ASCII码排序

c语言 向字符串中插入字符并排序