代碼文本:
創新互聯建站于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"http://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;
}