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语言字符串排序的主要内容,如果未能解决你的问题,请参考以下文章