2015-06-14 129 views
0

有些时候,我真的需要比较两个CHAR,并从我所知道的是没有函数在C来比较两个CHAR(也许我错了),因为这个,我决定写一个我自己的。 该功能工作正常,但我不知道如果还行,或者有一些问题。 我决定问你关于这个,如果我的功能没问题。 下面是程序:Char比较功能在C

#include<stdio.h> 
#include<string.h> 

int chrcmp(const char chr1, const char chr2); 

int main(void){ 
    char firstChar = 'a'; 
    char secondChar = 'a'; 

    if(chrcmp(firstChar, secondChar) == 0){ 
     printf("We have a Match\n"); 
    }else{ 
     printf("There was no match Found.\n"); 
     printf("%c",chrcmp(firstChar, secondChar)); 
    } 

    return 0; 
} 

int chrcmp(const char chr1, const char chr2){ 
    size_t lenght1, lenght2; 

    char s1[2] = {chr1 , '\0'}; /* Convert chr1 to string */ 
    char s2[2] = {chr2 , '\0'}; /* Convert chr2 to string */ 

    lenght1 = strlen(s1); /* Store lenght of first String */ 
    lenght2 = strlen(s2); /* Store lenght of second String */ 

    if(lenght1 == 1 && lenght2 == 1){ /* Checking if both strings have the same size (1) */ 
     if(strcmp(s1,s2) == 0){  /* Compare both strings */ 
      return 0; /* Match Found! */ 
     }else{ 
      return 1; /*No Match!;*/ 
     } 
    }else{ 
     return 1; /*To many chars Found!;*/ 
    } 
} 

如果有一些问题,或者如果我做错了什么我没有ideeas。

+0

与你的问题没有关系,实际上是一个挑剔的问题,但这个词是“长度”,而不是“长度”。 – szczurcio

+0

英语不是我自己的语言,但我认为你已经注意到了, – Michi

+0

是的,我没有试图批评你,或者让你感觉不好,只是一个友好的笔记,所以你知道未来的正确拼写:) – szczurcio

回答

1

在C中,char实际上是一个整数类型。对于算术运算,将其提升为int,因此您可以使用正常的整数比较。

注意是否char带符号是实现定义,所以要确保,你应该总是比测试平等的其他字符使用signed charunsigned char(推荐)如果你做算术(包括比较)。

你不能做的是比较两个字符数组,如

char ch[] = "Hello"; 
if (ch == "Hello") 
    ... 

对于您需要strncmp()strcmp()。只有当你是绝对确保两个字符串正确终止!

3

嗯...

只是这样做:

char a = 'y'; 
char b = 'x'; 
if(a == b) printf("Chars equal"); 

char类型C(和C衍生物)实际上是整数类型,并具有全套为它定义整数比较运算符:<,>,==,!=,< =,> =除了按位&,|和〜运算符。

3

从我知道有C中没有功能比较thow煤焦

这是不正确。有相等运算符==(以及所有其他的比较运算符):

if (firstChar == secondChar) { 
    /* chars are equal */ 
} 
+0

我知道它,我确实使用它,但在比较两个使用==的CHAR中,这是错误的。 – Michi

+1

@Michi你是怎么想的?除非通过“比较”,否则你的意思与平等比较不同。 – juanchopanza

+0

我做了一个开关菜单,我不得不要求用户Y或N,我不确定是否可以使用“==”比较两个字符。在这种情况下,我不知道CHARS被解释为整数。所以我决定让事情复杂化......我想。 – Michi