代码文本:
创新互联建站于2013年创立,是专业互联网技术服务公司,拥有项目成都网站制作、做网站、外贸营销网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元郏县做网站,已为上家服务,为郏县各地企业和个人服务,联系电话:18980820575
#include "stdio.h"
#define N 10
void myf(char *p){
char i,j,k,n;
for(n=0;p[n];n++);
for(n--,i=1;in-1;i++){
for(j=(k=i)+1;jn;j++)
if(p[k]p[j])
k=j;
if(k!=i)
j=p[k],p[k]=p[i],p[i]=j;
}
}
int main(int argc,char *argv[]){
char s[N+1];
printf("Enter a string(length 10)...\n");
scanf("%10s",s);
printf("After ordering:\n");
myf(s);
puts(s);
return 0;
}
对指针数组分配个长度
可以这样
{
s[i]
=
(char
*)malloc(sizeof(char)
*
1024);
scanf("%s",s[i]);
}
最后记得释放
for(i=0;iz;i++)
{
printf("%s:\t",s[i]);
free(s[i]);
}
声明一个字符串指针数组存放每个字符串的首地址,调用库函数qusort按题目要求对字符串指针排序,不移动源字符串。关键是要设计一个好的比较函数,精巧地解决“按长度、长度相等时按大小”排序的问题。举例代码如下:
//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#define N 10 //字符串个数
#define LN 21 //限制字符串长度为20
int mycmp(const void *a,const void *b){//比较函数
char *pa=*(char **)a,*pb=*(char **)b;
int x=int(strlen(pa)-strlen(pb));//依长度比较
return x ? x : strcmp(pa,pb);//长度相等时依大小比较
}
int main(void){
int i=0,j=0;
char *f[N],w[LN*N];//声明指针数组f和字符串总空间
printf("Input %d string(s)(length=%d)...\n",N,LN);
while(iN){//输入并将字符串首址赋给f[i]
if(scanf(" %[1234567890]",f[i]=w+j)0 strlen(f[i])LN)
i++,j+=LN;
else printf("Error, redo: Required length less than %d:",LN);
}
qsort(f,N,sizeof(char *),mycmp);//调用库函数对字符串指针排序
for(i=0;iN;printf("%s\n",f[i++]));//输出...
return 0;
}
C里面的字符串最后都是以数0(也就是
'\0'
这个符号)来表示结尾的。
计算字符串的长度的函数在头文件string.h已经提供了,也就是这个strlen(const
char
*)。
然后呢,就是表示字符串的数组了,在C里字符串虽然是数组实现的,但现在这个字符串数组的意思却是“由字符串组成的数组”,而不是“组成字符串的数组”。
字符串是数组,是字符数组,数组的名称就是这个数组的首地址,字符串的名称就是这个字符串的首地址,存放字符串的数组存放的那就是首地址了,也好办,就是:
char
**array;
我们来具体给他赋值:
1,给这个存放首地址的数组分配内存空间
int
Size=10;
char
**array=(char
**)malloc(
Size
*
sizeof(char
*)
);
2,然后给它的每一个元素赋上每一个字符串的首地址
array[0]="什么JB玩意";
array[1]="逗你玩呢";
....
3,然后根据字符串长度排序:
int
i;
char
*swap;
for(i=0;iSize-1;i++){
if(strlen(array[i])strlen(array[i+1])){
swap=array[i];
array[i]=array[i+1];
array[i+1]=swap;
}
}
4,排序好后输出:
for(i=0;iSize;i++)
printf(array[i]);
好了,就这些了
if(strcmp(str[i],str[j]0))写错了,应该是if(strcmp(str[i],str[j])0)。
这函数排序对象是char *型指针,所以主调函数中应该是char *a[5]={"jf","ufdiso",...};这倦定义的指针数组,而不能是char a[][5]这种类型的二维数组——因为这样定义的数组名是常指针,不能另外赋值……举例如下:
#include "stdio.h"
#include string.h
void sort(char *str[],int n){
int i,j;
char *p;
for(i=0;in-1;i++)
for(j=i+1;jn;j++)
if(strcmp(str[i],str[j])0)//你的代码这里写错了
p=str[i],str[i]=str[j],str[j]=p;
}
int main(int argc,char *argv[]){
char *a[5]={"12345","hfdjsk","ABCDE","iunvuu876","fff"};//这样定义
//而不能char a[][5]...这样定义
sort(a,5);
printf("%s\n%s\n%s\n%s\n%s\n",a[0],a[1],a[2],a[3],a[4]);
return 0;
}
运行结果:
#include stdio.h
#include string.h
void sort_str(char *str) { // 选择排序
//待补全部分
int i,j,k,t,len = strlen(str);
for(i = 0; i len - 1; ++i) {
k = i;
for(j = i + 1; j len; ++j) {
if(str[k] str[j])
k = j;
}
if(k != i) {
t = str[k];
str[k] = str[i];
str[i] = t;
}
}
}
int main() {
char str[101];
scanf("%s", str);
sort_str(str);//对字符串进行排序
printf("%s\n", str);
return 0;
}