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;
}
C/C++
Почему проверка пропускает второе условие?
Функция сравнивает до num символов две строки, и , если строки равны возвращает 0, если первая строка больше второй, то возвращает 1, иначе –1.Почему не выходит попасть во второе условие,(else if)
#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;
}
а while у тебя отрабатывает? если идет сравнение указателей то while не будет работать
1 срабатывает если содержание обеих строк было одинаково вплоть до окончания одной из них. Если же какой-то символ не совпал а окончания строк не было - то будет срабатывать только -1 так как == '/0' в первом условии не соблюдается
У меня работает
Вообще strcmp анализирует не длину строк, а числовые значения символов для определения какая строка больше. У тебя же сравнивается длина.
Вообще strcmp анализирует не длину строк, а числовые значения символов для определения какая строка больше. У тебя же сравнивается длина.

Потому что выполняется первое
Дмитрий Королёв
Как это исправить? Пробовала занести в сам цикл, но тогда выводится 72
Похожие вопросы
- Как сделать проверку на число типо если кто то ввел не число то будет чтото выводить на экран c++
- Задача на проверку попадания точки в заданную область в С++
- Проверка на правильность расстоновки скобок C++
- Учу с++, можете объяснить на пальцах? не понимаю работу условия в теле цикла... if ((i+1)%3 != 0)
- Помогите в C++ Включить CPP файл по условию
- Измерение времени на си. Почему-то скорость сортировки массива выводится со второго раза.. И еще надо измерить память
- Составьте алгоритм и напишите программу вычисления суммы n членов ряда согласно условию задачи
- Решите задачу на языке С++. Алгоритм проверки числа на простоту (переборный)
- Как завершить условие в функции?
- Что значит условие задачи?