C语言编程题,输入5个字符串,然后排序

详细:
从键盘上输入5个字符串(约定:每个字符串中字符数≤80字节),对其进行升序排序并输出。编程可用素材:printf("Input 5 strings:\n")...、printf("---------------------------\n")...。
  程序的运行效果应类似地如图1所示,图1中的
hello
my
friend
Are you ready?
help!

要求:尽量使程序简单化,不用自定义函数,不用指针;
谢谢各位了!!

#define LINEMAX 20/*定义字符串的最大长度*/

int main()

{int i;

char**p,*pstr[5],str[5][LINEMAX];

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

pstr<i>=str<i>;/*将第i个字符串的首地址赋予指针数组pstr的第i个元素*/

printf("input 5 strings:\n");

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

scanf("%s",pstr<i>);

p=pstr;

sort(p);

printf("strings sorted:\n");

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

printf("%s\n",pstr<i>);

}

sort(char**p)/*冒泡法对5个字符串排序函数*/

{int i,j;

char*temp;

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

{for(j=i+1;j<5;j++)

{if(strcmp(*(p+i),*(p+j))>0)/*比较后交换字符串地址*/

{temp=*(p+i);

*(p+i)=*(p+j);

*(p+j)=temp;

}

}

}

return 0;

}

扩展资料:

printf()函数的调用格式为:printf("<格式化字符串>",<参量表>)。

其中格式化字符串包括两部分内容:一部分是正常字符,这些字符将按原样输出;另一部分是格式化规定字符,以"%"开始,后跟一个或几个规定字符,用来确定输出内容格式。

参量表是需要输出的一系列参数,其个数必须与格式化字符串所说明的输出参数个数一样多,各参数之间用","分开,且顺序一一对应,否则将会出现意想不到的错误。

比如:

int a=1234;

printf("a=%d\n",a);

输出结果为a=1234。

scanf()是C语言中的一个输入函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include<stdio.h>。

int scanf(const char*restrict format,...);

函数scanf()是从标准输入流stdin(标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。

如:

scanf("%d%d",&a,&b);

函数返回值为int型,如果a和b都被成功读入,那么scanf的返回值就是2。

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-05-25
不用指针的话,用字符数组a[行][列]把5个字符串存下来,strcmp比较相邻子串,最简单的用冒泡+一个缓存子串,需要交换的时候strcpy到缓存,交换。
第2个回答  推荐于2017-09-25
#include<stdio.h>
#include<string.h>

int main()
{
char str[5][80];
char temp[80];
int i,j;
printf("Please input 5 strings:\n");
for (i=0;i<5;i++)
{
gets(str[i]);
}
for (i=0;i<5;i++)
{
for (j=i+1;j<5;j++)
{
if (strcmp(str[i],str[j])>0)
{
strcpy(temp,str[i]);
strcpy(str[i],str[j]);
strcpy(str[j],temp);
}
}
}
printf("The strings:\n");
for (i=0;i<5;i++)
{
puts(str[i]);
}
return 0;
}
完美运行。好像我刚刚就做了一遍??
望采纳!!本回答被提问者采纳
第3个回答  2012-05-25
#include <stdio.h>
#include <string.h>
int main()
{
char s[5][81];
char temp[81];
int i,j;
printf("Input 5 strings:\n");
for(i=0;i<5;i++)
{
gets(s[i]); /* 这次能用gets吧 */
}
for(i=0;i<4;i++)
{
for(j=i+1;j<5;j++)
{
if(strcmp(s[i],s[j])>0)
{
strcpy(temp,s[i]);
strcpy(s[i],s[j]);
strcpy(s[j],temp);
}
}
}
printf("---------------------------\n");
for(i=0;i<5;i++)
printf("%s\n",s[i]);
return 0;
}

输入5个字符串,按由小到大的顺序输出(用指针做)
include<stdio.h> include<string.h> main(){ int i,j;char t[5];char a[5][5]={'\\0'};printf("输入5个字符串");for(i=0;i<5;i++)scanf("%s",&a);for(i=0;i<5;i++)for(j=0;j<5-i;j++){ if(strcmp(a[j],a[j+1])>0){ strcpy(t,a[j]);strcpy(a[j],a...

C语言:输入5个字符串,按由小到大(我想应该是strcmp函数比较)的顺序输 ...
define M 5 define N 20 void main(){ char str[M][N],temp[N];int i,j;for(i=0;i<M;i++){ printf("请输入第%d个字符串:",i+1);scanf("%s",&str[i]);} printf("排序前:\\n");for(i=0;i<M;i++)printf("第%d个字符串:%s\\n",i+1,str[i]);for(j=0;j<M-2;...

一道c语言程序题: 输入5个字符串,按字典顺序将其重新排列输出。用字符串...
include<string.h> void main(){ void sort(char (*p)[20]);char a[5][20];\/\/五行20列 int i;printf("请输入5个字符串:\\n");for(i=0;i<5;i++)\/\/这里输入五个字符串 gets(a[i]);sort(a);\/\/调用函数进行排列 } void sort(char (*p)[20]){ char a[20];int i,j;for(...

输入五个字符串,要求按照字母顺序(即按ASCII码从小到大的顺序)输出这五...
include<stdio.h> include<string.h> define N 5 void main(){ int i,j;char str[N][80],temp[80];printf("请输入%d个字符串:\\n",N);for(i=0;i<N;i++){ gets(str[i]);} for(i=0;i<N-1;i++)for(j=i+1;j<N;j++)if(strcmp(str[i],str[j])>0){ strcpy(temp,s...

C语言要求通过键盘输入5字符串,再调用函数sort给字符串从小到大排列,再...
看你代码原意,是想定义一个字符串数组strs。但是你写的char *strs[5];表示的是一个维度为5的指针数组。你可以把strs直接改成字符串数组,char strs[5][N],但你后面的函数参数类型也要跟着改。如果你不想改动其他函数,还继续使用指针数组,也是可以的。你可以用动态内存来写输入部分:(头文件...

程序改错题 输入 5 个字符串,按字典序输出。
include<stdio.h>#include<stdlib.h>#include<string.h>define N 15\/\/每个字符串最多15个字符void main(){char str[5][N];char temp[N];int i=5;\/\/接受5个字符串 printf("请输入5个字符串");while(i>0){gets(str[i]);i--;}\/\/排序int j,k;for( j=0;j<5;j++) for( k=j...

c语言书上的一道编程题,输入5个字符串,并按字母顺序排列后输出。程序如...
{ k=i;for(j=i+1;j<5;j++)第一个for循环 for(i=0;j<5;i++),改成 for(i=0;i<5;i++)就没问题了 应该是书排版错误,如果是for(i=0;j<5;i++),下面的循环里面j已经等于5了,这个循环只执行了一次,相应的排序也只做了一次,设计肯定不是这样的,因此断定是排版错误,你自己...

任意输入5个字符串,按升序排序后输出
排序算法有问题,应该是选择排序吧,k是最小字符串下标初始化为i,判断strcmp(str[k],str[j])>0,则说明str[j]更小,即k=j,每次执行5-i次,依次升序排序。include "stdafx.h"include <iostream> include <cstring> using namespace std;int main(){ char *str[5], p[100];int i, j,...

输入5个字符串,将它们储存在一个字符指针数组中,按从小到大得顺序排序...
include<string.h> void main(){ char a[5][20];char *p[5];int i,j;char *t;for(i=0;i<5;i++){ p[i]=a[i];gets(p[i]);} for(i=0;i<5;i++){ for(j=i+1;j<5;j++){ if(strcmp(p[i],p[j])>0){ t=p[i];p[i]=p[j];p[j]=t;} } } for(i=0;...

C++编程 输入5个字符串,按英文字典排序,由小到大顺序输出。 求大神帮我...
\/\/输入字符串}\/* 思想: * 1.从当前字符串开始,与之后的所有字符串比较,找到最小(即按字母表 * 应该是最靠前的)的字符串即为排在最前面的字符串,则最小字符串与 * 当前字符串换位; * 2.从下一个字符串开始继续上一步操作,直到只有一个字符串剩余为止, * (只有一个字符串...

相似回答