聲明一個(gè)字符串指針數(shù)組存放每個(gè)字符串的首地址,調(diào)用庫函數(shù)qusort按題目要求對(duì)字符串指針排序,不移動(dòng)源字符串。關(guān)鍵是要設(shè)計(jì)一個(gè)好的比較函數(shù),精巧地解決“按長度、長度相等時(shí)按大小”排序的問題。舉例代碼如下:
為那坡等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及那坡網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都做網(wǎng)站、網(wǎng)站制作、那坡網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
//#include?"stdafx.h"http://If?the?vc++6.0,?with?this?line.
#include?"stdio.h"
#include?"string.h"
#include?"stdlib.h"
#define?N?10 //字符串個(gè)數(shù)
#define?LN?21 //限制字符串長度為20
int?mycmp(const?void?*a,const?void?*b){//比較函數(shù)
char?*pa=*(char?**)a,*pb=*(char?**)b;
int?x=int(strlen(pa)-strlen(pb));//依長度比較
return?x???x?:?strcmp(pa,pb);//長度相等時(shí)依大小比較
}
int?main(void){
int?i=0,j=0;
char?*f[N],w[LN*N];//聲明指針數(shù)組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);//調(diào)用庫函數(shù)對(duì)字符串指針排序
for(i=0;iN;printf("%s\n",f[i++]));//輸出...
return?0;
}
沒有這樣的庫函數(shù),都比較簡單的,自己寫個(gè)好了
如果是字符串?dāng)?shù)組,strchrstring.h可以查找某個(gè)字符是否在這個(gè)字符串?dāng)?shù)組中
沒有的。C語言是較為基礎(chǔ)的源語言,函數(shù)庫不包含更多的函數(shù),用雙重for循環(huán)已經(jīng)是最簡便也是最簡潔的表現(xiàn)形式了。但就字符而言,無論是存儲(chǔ)還是輸入都更為麻煩,所以庫函數(shù)用的多。
給你學(xué)習(xí)C語言的建議是:不要偷懶,多想想怎么用最基礎(chǔ)的語言寫代碼,這對(duì)程序思維的培養(yǎng)以及日后進(jìn)一步的學(xué)習(xí)代碼都是有好處的。
滿意請(qǐng)采納!有問題隨時(shí)可以交流!
#include
"stdio.h"
void
input(int
a[10])
//給一維數(shù)組輸入數(shù)據(jù)
{
int
i;
for(i=0;i10;i++)
scanf("%d",a[i]);
}
void
output(int
a[10])
//輸出一維數(shù)組輸入數(shù)據(jù)
{
int
i;
for(i=0;i10;i++)
printf("%d
",a[i]);
}
int
main()
{
int
b[10];
input(b);
//調(diào)用input函數(shù)給數(shù)組b賦值
output(b);//調(diào)用output函數(shù)輸出數(shù)組b中的值
}
給你看一下我的代碼
#includestdio.h
void main(){
int a[10],b[10],i,j,temp;
for(i=0;i10;i++){
printf("請(qǐng)輸入第%d個(gè)數(shù):",(i+1));
scanf("%d",a[i]);
//保存數(shù)組,因?yàn)檩斎胪陻?shù)組要冒泡排序,排序后的元素順序可能和原數(shù)組不一樣
b[i]=a[i];
}
//冒泡排序,求最大值
for(i=0;i9;i++){
for(j=0;j9-i;j++){
if(a[j]a[j+1]){ //這里控制的升序還是降序,我這是降序
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
//查找最大值在原數(shù)組的位置
for(i=0;i10;i++){
if(b[i]==a[0]){ //降序的話最大值是a[0],升序的話最大值是a[9]
break; //一旦找到最大值,馬上跳出循環(huán)
}
}
printf("最大值是%d,它在原數(shù)組中是第%d個(gè)元素!\n",a[0],(i+1));
}
#include?stdio.h
/*比較兩個(gè)字符串*/
/*src、dst相等?return?1*/
/*src比dst短?return?-2*/
/*src比dst長?return?2*/
/*src、dst長度一致但不相等?return?-1*/
int?stringCmp?(char?*src,?char?*dst)?{??
if?(strlen?(src)??strlen?(dst))
return?-2;
else?if?(strlen?(src)??strlen?(dst))
return?2;
else?{
while?(*src??*dst)?{
if?(*src?!=?*dst)
return?-1;
src++;
dst++;
}
return?1;
}
}
/*合并兩個(gè)字符串*/
void?mergeString(char*?str1,?char*?str2,?char*?merge)?{
while?(*merge++?=?*str1++);?/*復(fù)制str1并將指針移動(dòng)到字符串的末尾的下一個(gè)位置*/
merge--;?/*退到字符串的末尾*/
while?(*merge++?=?*str2++);?/*從末尾(\0)的位置開始將str2拷貝進(jìn)來*/
*merge?=?'\0';
}
int?main(void)?{
char?*str1_1="hel",*str1_2="lo",?*merge1;
char?*str2_1="ness",*str2_2="happy",?*merge2;
char?*str3_1="hi",*str3_2="hi",?*merge3;
char?*str4_1="hello",*str4_2="world",?*merge4;
puts?("第1組字符串:");
puts?(str1_1);
puts?(str1_2);
if?(stringCmp?(str1_1,?str1_2)?==?1)
puts?(str1_1);
else?if?(stringCmp?(str1_1,?str1_2)?==?-2)?{
mergeString?(str1_2,?str1_1,?merge1);
puts?(merge1);
}
else?if?(stringCmp?(str1_1,?str1_2)?==?2?||?stringCmp?(str1_1,?str1_2)?==?-1)?{
mergeString?(str1_1,?str1_2,?merge1);
puts?(merge1);
}
putchar?('\n');
puts?("======================================================");
putchar?('\n');
puts?("第2組字符串:");
puts?(str2_1);
puts?(str2_2);
if?(stringCmp?(str2_1,?str2_2)?==?1)
puts?(str2_1);
else?if?(stringCmp?(str2_1,?str2_2)?==?-2)?{
mergeString?(str2_2,?str2_1,?merge2);
puts?(merge2);
}
else?if?(stringCmp?(str2_1,?str2_2)?==?2?||?stringCmp?(str2_1,?str2_2)?==?-1)?{
mergeString?(str2_1,?str2_2,?merge2);
puts?(merge2);
}
putchar?('\n');
puts?("======================================================");
putchar?('\n');
puts?("第3組字符串:");
puts?(str3_1);
puts?(str3_2);
if?(stringCmp?(str3_1,?str3_2)?==?1)
puts?(str3_1);
else?if?(stringCmp?(str3_1,?str3_2)?==?-2)?{
mergeString?(str3_2,?str3_1,?merge3);
puts?(merge3);
}
else?if?(stringCmp?(str3_1,?str3_2)?==?2?||?stringCmp?(str3_1,?str3_2)?==?-1)?{
mergeString?(str3_1,?str3_2,?merge3);
puts?(merge3);
}
putchar?('\n');
puts?("======================================================");
putchar?('\n');
puts?("第4組字符串:");
puts?(str4_1);
puts?(str4_2);
if?(stringCmp?(str4_1,?str4_2)?==?1)
puts?(str4_1);
else?if?(stringCmp?(str4_1,?str4_2)?==?-2)?{
mergeString?(str4_2,?str4_1,?merge4);
puts?(merge4);
}
else?if?(stringCmp?(str4_1,?str4_2)?==?2?||?stringCmp?(str4_1,?str4_2)?==?-1)?{
mergeString?(str4_1,?str4_2,?merge4);
puts?(merge4);
}
putchar?('\n');
puts?("======================================================");
putchar?('\n');
getch?();?/*屏幕暫留*/
return?0;
}
運(yùn)行結(jié)果