Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Почему проверка пропускает второе условие?

Diana Ahadova Ученик (106), закрыт 1 год назад
Функция сравнивает до num символов две строки, и , если строки равны возвращает 0, если первая строка больше второй, то возвращает 1, иначе –1.Почему не выходит попасть во второе условие,(else if)

 int mystrcmp(const char* str1, const char* str2) { 

while (*str1 == *str2) {
if (*str1 == '\0' || *str2 == '\0')

break;
str1++;
str2++;
}

if (*str1 == '\0' && *str2 == '\0')
return 0;
else if (*str1 != '\0' && *str2 == '\0')
return 1;
else
return -1;

}
Лучший ответ
Николай Веселуха Высший разум (360873) 1 год назад
 #include  
int sign(int value) {
if (value > 0) value = 1;
else if (value < 0) value = -1;
return value;
}
int mystrlen(const char* str) {
int len = 0;
while (*str++) ++len;
return len;
}
int mystrcmp(const char* str1, const char* str2) {
return sign(mystrlen(str1) - mystrlen(str2));
}
int main(void) {
printf("%i\n", mystrcmp("Hello World", "Hello World"));
printf("%i\n", mystrcmp("Hello World!", "Hello World"));
printf("%i\n", mystrcmp("Hello World", "Hello World!"));
return 0;
}
 #include  
int sign(int value) {
if (value > 0) value = 1;
else if (value < 0) value = -1;
return value;
}
int mystrcmp(const char* str1, const char* str2) {
while (*str1 && *str2) {
if (*str1 != *str2) break;
++str1;
++str2;
}
return sign(*str1 - *str2);
}
int main(void) {
printf("%i\n", mystrcmp("Hello World", "Hello World"));
printf("%i\n", mystrcmp("Hello World!", "Hello World"));
printf("%i\n", mystrcmp("Hello World", "Hello World!"));
printf("%i\n", mystrcmp("Yellow", "Hello World"));
return 0;
}
Остальные ответы
Anya Мастер (1990) 1 год назад
Потому что выполняется первое
Diana AhadovaУченик (106) 1 год назад
Как это исправить? Пробовала занести в сам цикл, но тогда выводится 72
Άηϑρέΰ ҂ Искусственный Интеллект (179807) 1 год назад
а while у тебя отрабатывает? если идет сравнение указателей то while не будет работать
serd Мудрец (17869) 1 год назад
У меня работает
Вообще strcmp анализирует не длину строк, а числовые значения символов для определения какая строка больше. У тебя же сравнивается длина.
Сергей Гений (56537) 1 год назад
1 срабатывает если содержание обеих строк было одинаково вплоть до окончания одной из них. Если же какой-то символ не совпал а окончания строк не было - то будет срабатывать только -1 так как == '/0' в первом условии не соблюдается
Похожие вопросы