C語言字符串比較(轉)


#include <string.h>
char s1[10],s2[10]; ... if(strcmp(s1,s2)==0) printf("兩字符串相等\n");
string.h 頭文件中就有比較函數,可以用來比較是否相等

2:這個是普通方法 不調用函數strcmp();
#include &lt;stdio.h&gt;

int comparision(char a[],char b[])
{
int t,i=0;
while(a[i]!='\0'||b[i]!='\0')
{
if(a[i]==b[i]) t=0;
else if(a[i]&gt;b[i]) t=1;
else t=-1;
if(t!=0) break;
i++;
}
return t;
}

main(void)
{
char a[40],b[40];
int k=0;
gets(a);
gets(b);
k=comparision(a,b);
if(k==1) printf("a[40]&gt;b[40]");
else if(k==-1) printf("a[40]&lt;b[40]");
else printf("a[40]=b[40]");
}  

 

【解惑】C語言中為什么兩個字符串不能直接進行比較?

大家都知道,在C語言中兩上字符串是不能直接進行比較的,我們一般使用<string.h>中的字符串比較函數strcmp()來進行兩個字符串的比較。那么,為什么不允許兩個字符串直接進行比較呢?可做如下解釋:
有如下代碼: char s1[] = "abc"; char s2[] = "abc";
如果直接進行比較: if (s1 == s2) { printf("s1等於 s2"); } else { printf("s1 不等於s2"); }
大家想想輸出結果會是什么呢?
輸出結果永遠為:s1 不等於 s2.(不論你換成char s1[] = "abc"; char s2[] = "def"; 還是char s1[] = "def"; char s2[] = "abc";,輸出結果都一樣)。
為什么呢? 大家因為這樣比較,其實是在把s1和s2當作指針來進行比較,而不是比較兩個數組中的內容。因為s1和s2在內存中位置肯定不同,所以s1 == s2的值肯定為0,所以出現上面的結果也就是理所當然了。

這個應該可以追溯到C語言中 數組(字符串也可認為是數組)的訪問機制

 摘自


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM