Тема: порівняння двох рядків(без використання бібліотечних функцій)
Щось зробив неправильно а от що не знаю, довільно порівню мої рядки за довжиною.
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, 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
Для відправлення відповіді ви повинні увійти або зареєструватися