
代码如下:
#define N 10 int main(){char str[N][100]; int i,j; for(i = 0; i < N; i ++) scanf("%s",str[i]); for(i = 0; i < N-1; i ++) { for(j = i+1; j < N; j ++){ if(strcmp(str[i],str[j])>0) { char temp[100]; strcpy(temp,str[i]); strcpy(str[i],str[j]); strcpy(str[j],temp);} } } for(i = 0; i < N; i ++) puts(str[i]);}。
运行代码:
执行结果:
扩展资料
在C语言编程中,常常需要对字符串比较和排序,经常遇到对字符串整体的控制等 *** 作,strcmp 比较str1和str2的大小,而其它的c函数strlen(),字符串拷贝函数strcpy()/strncpy(),字符串比较函数 strcmp(),字符串连接函数strcat()/strncat()等,都可以帮助我们快速方便的对字符串 *** 作。
参考资料:
首先根据插入排序的原理,设计插入排序函数,函数传入参数是字符串数组和字符串数组的长度,函数无返回值。然后输入字符串,调用函数排序,最后输出排序后字符串。
参考代码:
#include<stdioh>#include<stringh>
#define MAX 1000
void insert(char a,int n)
{
int i,j;
char key;
for(i=1;i<n;i++)//控制需要插入的元素
{
key=a[i]; //key为要插入的元素
for(j=i;j>0 && a[j-1]>key;j--) //查找要插入的位置,循环结束,则找到插入位置
{
a[j] = a[j-1]; //移动元素的位置供要插入元素使用
}
a[j] = key; //插入需要插入的元素
}
}
int main()
{
char a[MAX];
int n;
gets(a);//输入字符串
n=strlen(a);
insert(a,n);//调用函数排序
printf("after:\n");
puts(a);
return 0;
}
你代码里有好多错误啊
少分号
少个大括号
关键还有
n没定义
n
是表示字符串长度么
#include
<stdioh>
#include
<stringh>
void
fun(char
a)
{
int
i,j;
char
ch;
//求出字符串有多少个元素
int
n=strlen(a);
for(i=0;i<n;i++)
//冒泡排序法
for(j=0;j<n-1;j++)
{
if(a[j]>a[j+1])
//升序
{
ch=a[j];
a[j]=a[j+1];
a[j+1]=ch;
}
}
}
void
main
()
{
char
a[81];
printf("输入a:\n");
scanf("%s",a);
fun(a);
printf("结果是:\n");
printf("%s\n",a);
}
#include <stdioh>
#include <stringh>
void sortstr(char ,int);
void main()
{
static char proname[]={
"pascal",
"basic",
"cobol",
"prolog",
"lisp"};
int i;
sortstr(proname,5);
for(i=0;i<5;i++)
printf("%s\n",proname[i]);
}
void sortstr(char v[],int n)
{
int i = 0;
int j = 0;
char temp;
for(i = 0; i < n;i++)
{
for(j = i; j < n;j++)
{
if(0 < strcmp(v[i],v[j]))
{
temp = v[i];
v[i] = v[j];
v[j] = temp;
}
}
}
}
给你个思路吧,你能实现小写的排序,编程本身应该难不到你
程序直接分三部分写,小写的排序,大写的排序,数字的排序。这三个部分可以循环完成。
在小写的排序中这样实现:
1搞两个指针从前往后找(不想用指针,直接用整形标记下标也行)
2找到依次两个小写字母,若第一应该在第二之后,交换这两个的位置
3第一指针指向第二个的位置,第二个继续找下一个小写字母,然后重复步骤2到尾部结束。
4记录下小写字母的个数n。以上1-3再重复n-1次。
其实就是针对小写字母做冒泡把非小写字母排除在外不动它就是了。
大写和数字的可以循环完成。
具体实现我就不把代码写出来了,你不明白的再问吧
输入10个字符串,并按字母从小到大排序
#include "stdioh"
#include "stringh"
void sort(char array[][20],int n);
main(void)
{
char str[10][20];
int i,j,k,n;
printf("input n (n<=10):");
scanf("%d",&n);
printf("input %d string:",n);
for(i=0;i<n;i++)
gets(str[i]); //输入N个字符串
sort(str,n); //对输入的字符串排序
printf("sort string:\n");
for(i=0;i<n;i++)
puts(str[i]);
return 0;
}
void sort(char array[][20],int n) //定义排序函数
{
char temp[20];
int i,j,k;
for(i=1;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp(array[k],array[j])>0)
k=j;
if(k!=i)
{
strcpy(temp,array[i]); //字符串交换顺序
strcpy(array[i],array[k]);
strcpy(array[k],temp);
}
}
}
如上源码所示,其实也不难发现,就一个排序函数便可以解决;解决思想,还是交换法;在这里明白字符串数组str[0],便是第一个主的字符串,跟这个2维str[0][20]是一个意思
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)