2015-06-14 2 views
0

Там несколько раз, когда мне действительно нужно сравнить два CHAR, и из того, что я знаю, нет функции в C для сравнения двух 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

Не связано с вашей проблемой и на самом деле nitpick, но слово 'length', а не' lenght'. – szczurcio

+0

Английский язык не мой, но я думаю, что вы уже заметили это, – Michi

+0

Да, я не пытался критиковать вас или заставлял вас чувствовать себя плохо, просто дружеское замечание, чтобы вы знали правильное правописание в будущем :) – szczurcio

ответ

1

В C, char фактически целочисленный тип. Для арифметических операций это повышается до int, поэтому вы можете использовать нормальное целочисленное сравнение.

Обратите внимание, что ли char подписан или без знака является реализация определяется, так, чтобы убедиться, что вы всегда должны использовать signed char или unsigned char (рекомендуется), если вы арифметика (включая сравнение) на других, чем тест на равенство символов.

То, что вы не можете сделать, это сравнить два 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 сравнить Сбрось CHARS

Это неправильно. Существует оператор равенства == (как и все остальные операторы сравнения):

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

Я знаю об этом, и я использовал его, но в hardt, что неправильно, сравнение двух CHARs, использующих ==. – Michi

+1

@ Michi Что заставило вас подумать? Если «сравнение» означает нечто иное, чем сравнение равенства. – juanchopanza

+0

Я сделал меню с переключателем, и я должен был спросить пользователя о Y или N, и я не был уверен, могу ли я сравнить два символа с помощью «==». Я не знал, что CHARS интерпретируются как целые числа в этих ситуациях. Поэтому я решил усложнить ситуацию ... я думаю. – Michi

Смежные вопросы