strcmp函數是string compare(字符串比較)的縮寫,用於比較兩個字符串並根據比較結果返回整數。基本形式為strcmp(str1,str2),若str1=str2,則返回零;若str1<str2,則返回負數;若str1>str2,則返回正數。
首先說明strcmp的使用格式:
strcmp(char1 *, char2 *);
該函數功能是:從第一個元素開始,依次比較字符串數字char1和char2,如果char1的第n個元素比char2d的第n個元素大,則返回值為大於0 的數,相反的話,則返回小於0的數,如果相等,則繼續比較 n+1個元素,直到第n+1個不相等,就停止比較,並返回相應的值。(注意:char1 *這里實際放的是一個指針,字符數組名實際就是一個常量指針)
舉例:
char name_1[10]={"zhangsan"}; name_2[10]={"zhaoliu"};
syrcmp(name_1,name_2);
比較的結果是:因為“z”“h”“a”都相等,所以繼續比較第四個元素“n” 和“o”;比較至此,已經有返回值了,所以停止后邊的比較,並返回相應的值。
應用實例;按照字母從小到大輸出姓名
char name[5][20]={"zhangsan","lisi","wangwu","zhaoliu","any"};
//k控制比較的趟數
for(int k=0; k<5;k++){
//i控制比較的第一維空間
for (int i = 0; i<4; i++) {
//j控制每個姓名的第j個字母
for (int j = 0; j<20; j++) {
//利用strcmp 函數比較字母大小
if (strcmp(&name[i][j], &name[i+1][j])>0) { //使用&的原因是:字符數組名的本質是一個指針,指向一個地址。在這里使用&取某一個元素的地址。
char temp[20];
strcpy(temp, name[i]);
strcpy(name[i], name[i+1]);
strcpy(name[i+1], temp);
}
//交換結束后,停止本組名字的繼續比較,進行下一個名字的比較
break;
}
}
}
for (int i = 0; i < 5; i++) {
printf("%s\n",name[i]);
}
//運行結果
any
lisi
wangwu
zhaoliu
zhangsan
