[英]Compare Two Character Arrays in C
我有一個字符串結構。
struct string
{
char *c;
int length;
int maxLength;
}
我想檢查兩個字符串是否相等。
所以我想運行一個for循環。
for(int i = 0; i < length; i++)
if(s1[i] != s2[i]) // This code is more C# than C.
s1和s2都是字符串結構。
if(s1[i] != s2[i])
我該怎么做?
編輯:我剛剛做了這個,是不是殺了?
for(i = 0; i < length; i++)
if((*s1).c[i] != (*s2).c[i])
{
printf("Failed");
return 0;
}
假設您可以使用帶有\\0
終止的C字符串,我會這樣做並使用strcmp :
if (strcmp(s1.c, s2.c)) {
// action if strings are not equal
}
我假設您想自己編寫比較代碼,而不是使用strcmp()
這樣的內置strcmp()
- 這可能是通過編寫或生成優化匯編代碼而提升的性能。 如果字符串相等,則are_equal()
函數將返回1(true),否則返回0(false)。
static inline int min(int a, int b) { return (a < b) ? a : b; } int are_equal(const struct string *s1, const struct string *s2) { int len = min(s1->length, s2->length); int i; for (i = 0; i < len; i++) { if (s1->c[i] != s2->c[i]) return 0; // They are different } return(s1->c[i] == s2->c[i]); }
inline
函數假定為C99編譯器; 如果您使用C89卡住,可以用適當的宏替換它。
int are_equal(const struct string *s1, const struct string *s2)
{
if (s1->length != s2->length)
return 0; // They must be different
for (int i = 0; i < s1->length; i++)
{
if (s1->c[i] != s2->c[i])
return 0; // They are different
}
return 1; // They must be the same
}
兩個版本的代碼都假設s1->c
和s2->c
中的字符串是空終止的,並且s1->length == strlen(s1->c)
和s2->length == strlen(s2->c)
。
使用C99,也可以使用_Bool
作為返回類型,或者使用<stdbool.h>
和bool
(作為返回類型),使用true
和false
作為返回值。
strcmp()
替代解決方案 請注意,如果您只是使用strcmp()
,如果字符串相等,您將獲得0,如果字符串不相等,則將獲得非零值。 所以,如果字符串相等,你也可以寫這樣的函數返回true,否則返回false:
int are_equal(const struct string *s1, const struct string *s2)
{
return strcmp(s1->c, s2->c) == 0;
}
你的if
語句是不完整的(可能缺少設置標志然后是break
或return
),並且你也許不使用struct
struct string {
char *c;
int length;
int maxLength;
};
bool same_string (struct string *s1, struct string* s2) {
int ln1 = s1->length;
if (ln1 != s2->length) return false;
for (int i=0; i<ln1; i++)
if (s1->c[i] != s2[ci]) return false;
return true;
}
但你真的想要strncmp
即公正
bool same_string (struct string *s1, struct string* s2) {
if (s1->length != s2->length) return false;
return strncmp(s1->c, s2->c, s1->length)==0;
}
您需要比較每個成員
int compare(struct string s1, struct string s2){
return (strcmp(s1.c,s2.c) == 0) &&
(s1.maxLength ==s2.maxLength) &&
(s1.length ==s2.length) ;
}
for(int i = 0; i < length; i++)
if(!compare(s1,s2)) {
}
你真的不需要知道字符串的長度來比較它們。 您可以使用標准庫strncmp
的字符串比較工具,最好是使用strcmp
,或者您可以編寫自己的類似於此:
int strcmp(char *s1, char *s2)
{
int i;
for (i = 0; s1[i] == s2[i]; i++)
if (s1[i] == '\0')
return 0;
return s1[i] - s2[i];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.