當前位置:成語大全網 - 新華字典 - 壹道C語言題目,跪求!!

壹道C語言題目,跪求!!

這個問題的關鍵是 int strcmp (const char *str1, const char *str2 ),即比較字符串函數的理解。

比較字符串是基於字符串的字典序的。給定兩個字符串,誰的字典序大呢?這就可以通過 strcmp 函數來確定!

strcmp 的內部實現大致是這樣的:

int strcmp (const char *str1, const char *str2 )

{

int i;

for(i=0;i<str1[i] != '\0' && str2[i] != '\0';i++)

{

// str1 和 str2 對應位置的字符相等,

//比較下壹個字符

if(str1[i]==str2[i]) continue;

// str1 和 str2 對應位置的字符中,str1 [i] 的 ascii 碼大於 str2 [i] 的 ascii 碼,

//認為 str1 > str2,返回 1

else if(str1[i]>str2[i]) return 1;

// str1 和 str2 對應位置的字符中,str1 [i] 的 ascii 碼小於 str2 [i] 的 ascii 碼,

//認為 str1 < str2,返回 -1

else if(str1[i]<str2[i]) return -1;

}

// 如果執行到這裏,說明 str1 和 str2 中至少有壹個字符串中的字符已經在比較中用完了,

//即 str1[i] == '\0' 和 str2[i] == '\0' 至少有壹個成立

//如果 str1 和 str2 中的字符在比較中同時用完了,並且沒有發現對應位置有不同的字符,

//認為 str1 和 str2 相等,返回 0

if(str1[i] == '\0' && str2[i] == '\0') return 0;

//如果 str1 中的字符在比較中同時用完了,並且和 str2 對應位置上沒有發現不同字符

//但是 str2 還有多余的字符(比如 str1="abc",str2="abcde",str2比str1多出"de")

//認為 str1 < str2 ,返回 -1

else if(str1[i] == '\0') return -1;

//如果 str2 中的字符在比較中同時用完了,並且和 str1 對應位置上沒有發現不同字符

//但是 str1 還有多余的字符(比如 str1="abcde",str2="abc",str1比str2多出"de")

//認為 str1 > str2 ,返回 1

else if(str2[i]== '\0') return 1;

}

如果理解了 strcmp 函數的含義,那妳的程序就容易理解了:

#include <stdio.h>

#include<string.h>

main()

{ int i;

char s[10],t[10];

// 首先讀如壹個字符串,保存在 t

gets(t);

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

{

//繼續讀入字符串,暫時保存在 s

gets(s);

//比較剛讀入的字符串 s 和保存在 t 中的字符串 ,

//如果 t 中的字符串比 s 中的字符串字典序小

//(妳應該已經理解壹個字符串比另壹個字符串字典序小的含義了吧?)

//則把 s 字符串中的內容拷貝到 t 字符串中(沒錯,strcpy 函數就是做這個事情的)

if (strcmp(t,s)<0)

//通過這次拷貝,t 中保存的字符串又成功的變回妳當前已經輸入的字符串中

//字典序最大的了!!!

strcpy(t,s);

}

//到這裏妳應該知道,t 中保存的字符串是妳輸入的所有字符串中字典序最大的!!

printf("%s\n",t);

}