Я пытаюсь написать пользовательскую функцию strcmp () без использования встроенной функции. Пока что мой код кажется немного запутанным. По сути, я хочу, чтобы порядок символов был таким:
- Специальные символы (в порядке их появления)
- Цифры
- Буквенные символы по порядку, но сначала заглавные буквы, т. Е. "AaBbCcDd"
Возвращать 1, если строка1 предшествует строке2, -1, если строка2 предшествует строке1, и 0, если они равны.
Вот код, который у меня есть:
int strcmp(char * string1, char * string2)
{
while((*string1 != '\0') && (*string2 != '\0') && (*string1 == *string2))
{
++string1;
++string2;
}
//If both are now zero, they are equal
if (*string1 == *string2 == '\0') { return 0; }
//If string1 is comes before, return 1
//If string2 is comes before, return -1
int type1 = (isalpha(string1) ? 2 : (isnum(string1) ? 1 : 0))
int type2 = (isalpha(string2) ? 2 : (isnum(string2) ? 1 : 0))
return ((type1 < type2) 1 : ((type2 < type1) -1 :
(((*string1 >= 'a') ? (*string1 - 'a')*2+1 : (*string1 - 'a')*2) <
((*string2 >= 'a') ? (*string2 - 'a')*2+1 : (*string2 - 'a')*2) ? 1 : -1)));
}
Есть две вещи, в которых я не уверен:
- Является ли присвоение «категорий» правильным подходом. Прямо сейчас я назначаю тип 0 специальным символам, тип 1 - цифрам, а тип 2 - буквам. Таким образом, я могу быстро сравнить типы.
- Подходит ли мой подход к использованию алгебраических операций для установления порядка букв алфавита.
Это хорошие подходы? Там лучше? Пожалуйста, имейте в виду, что я максимизирую эффективность.