Тема: порівняння двох рядків(без використання бібліотечних функцій)
Щось зробив неправильно а от що не знаю, довільно порівню мої рядки за довжиною.
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C++ → порівняння двох рядків(без використання бібліотечних функцій)
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Щось зробив неправильно а от що не знаю, довільно порівню мої рядки за довжиною.
Щось зробив неправильно а от що не знаю, довільно порівню мої рядки за довжиною.
▼Прихований текст
Ну , почнем з того, що ви використовуєте бібліотечні функції
На мою думку, Вам потрібно брати Ваші стрічки й просто посимвольно їх порівнювати .
Відповідно , зробіть функцію типу "bool" і повертайте true - коли "рівні" між собою і false - навпаки.
Але зрозумійте, що Вам потрібно порівняти 2 рядки! А не їх довжини.
shonrens написав:Щось зробив неправильно а от що не знаю, довільно порівню мої рядки за довжиною.
▼Прихований текстНу , почнем з того, що ви використовуєте бібліотечні функції
На мою думку, Вам потрібно брати Ваші стрічки й просто посимвольно їх порівнювати .
Відповідно , зробіть функцію типу "bool" і повертайте true - коли "рівні" між собою і false - навпаки.
Але зрозумійте, що Вам потрібно порівняти 2 рядки! А не їх довжини.
Ось переробив, виводить постійно що вони неоднакові
Думайте коли закінчувати порівняння
Думайте коли закінчувати порівняння
while (mes1 || mes2){
if (*mes1 == *mes2){
mes2++;
mes1++;
}
else
return false;
}
return true;
а хіба воно не повино дійти до завершення, і якщо не потрапляє в else вивести мені тру?
саме так, воно не повинно дійти до завершення всієї ділянки пам'яті, бо тоді програма вивалиться з помилкою, десь потрібно зупинитися в порівнянні стрічок
саме так, воно не повинно дійти до завершення всієї ділянки пам'яті, бо тоді програма вивалиться з помилкою, десь потрібно зупинитися в порівнянні стрічок
А як можна дізнатись що масив дійшов кінцю?
mes1 == '\0' && mes2 == '\0';
return true;
Можливо ось так якось?
Я просто не дуже розумію цю нову тему з типом char, якось важко мені його реалізувати .
так, правильно, ви ж порівнюєте стрічки з кінцевим нулем, тому так
так, правильно, ви ж порівнюєте стрічки з кінцевим нулем, тому так
Всерівно щось не виходить
while (mes1 && mes2){
if (mes1 == '\0' && mes2 == '\0' && mes1 == mes2)
return true;
if (mes1 == mes2){
mes1++;
mes2++;
}
else
return false;
}
все розібрався дякую.
Можливо кому цікаво треба було через * в if зробити
bool comTwoRows(char *mes1, char *mes2)
{
while (mes1 && mes2){
if (*mes1 == '\0' && *mes2 == '\0' && *mes1 == *mes2)
return true;
if (*mes1 == *mes2){
mes1++;
mes2++;
}
else
return false;
}
}
А у while ви свідомо перевіряєте вказівники на нуль? Воно-то може й має сенс, але у вигляді однієї перевірки на початку функції, а не на кожній ітерації циклу.
А у while ви свідомо перевіряєте вказівники на нуль? Воно-то може й має сенс, але у вигляді однієї перевірки на початку функції, а не на кожній ітерації циклу.
а як правильно? Якщо можна покажіть код а то я так не дуже розумію як правильніше.
bool comTwoRows(char *mes1, char *mes2)
{
if( mes1 == mes2 ) { //якщо вказують на один рядок
return true;
}
if( !mes1 || !mes2 ) { //якщо хтось з них NULL, але не обидва
return false;
}
while ( *mes1 == *mes2 ){//порівнюємо, доки рівні
if( *mes1 == '\0' ) {//якщо рівні і дійшли до кінця - значить, дійсно рівні
return true;
}
++mes1;
++mes2;
}
return false;//якщо вийшли з циклу - значить, не рівні
}
bool comTwoRows(char *mes1, char *mes2) { if( mes1 == mes2 ) { //якщо вказують на один рядок return true; } if( !mes1 || !mes2 ) { //якщо хтось з них NULL, але не обидва return false; } while ( *mes1 == *mes2 ){//порівнюємо, доки рівні if( *mes1 == '\0' ) {//якщо рівні і дійшли до кінця - значить, дійсно рівні return true; } ++mes1; ++mes2; } return false;//якщо вийшли з циклу - значить, не рівні }
Дуже дякую що так розписали тепер все зрозуміло.
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися