какой еще вариант алгоритма сравнения строк есть? цикл for вы уже применили... менять конструкцию if это наверное не то так как очень просто..., может while...? но у меня не получается в нем нужные условия задать для корректной работы, дайте хоть направление в какую сторону думать...что вы имели ввиду? #include int main(void) { char s1[12] = "Hello"; char s2[10] = "Hello"; const char *str1 = s1; const char *str2 = s2; int i = 0; for(; str1[i] != '\0' || str2[i] != '\0'; ++i) { if(str1[i] != str2[i]) { puts("Strings are not equal!"); return 0; } } puts("Strings are equal!"); return 0; }
ups....PLEASE HELP! Inside the loop 'for' you have inserted the double mark '&&'... is it not means the mark '&' (and)? and why you don't use there the mark '|' (or)? until one of them will be != '\0'; // isn't it? What do you mean by operator 'if' in the first case, are current chars of the two strings not equal or what? In the second case it is the same line... int i = 0; // auxiliary loop's counter; for(; str1[i] != '\0' && str2[i] != '\0'; ++i) // iterate the characters of strings (str1 and str2) until one of them will be != '\0'; if(str1[i] != str2[i]) { // checking if a current char of str1 is not equal a current char of str2;
Кстати, да. Путаница между союзами естественного языка и логическими операциями. Классический пример - запрос "Клиенты, живущие в Кентукки и Небраске" выдал "Клиентов нет", потому что никто не жил одновременно в двух штатах. Надо было набирать "в Кентукки ИЛИ Небраске". Аналогично, "Леди и джентльмены" - обращение не к человеку особого пола, в магазине "Овощи и фрукты" продают не только морковку (которая в некоторых странах считается овощем , а в других - фруктом). Союз И часто употребляется там, где, строго говоря, нужно ИЛИ. Кроме того, ИЛИ может означать как "включающее или", так и исключающее (либо - либо, но не оба вместе, т.е. XOR). Еще больше путаницы, когда дополнительно присутствует отрицание. Поэтому при составлении программы, лучше говорить не просто И (&&), а добавлять "одновременно": "икс положительно И игрек отрицательно одновременно". А для ИЛИ (||) полезно добавлять "или оба вместе (оба одновременно)".
да уж поймал диссонанс, получется уловие: если 1 строка не закончилась И вторая строка не закончилась --делаем, то есть 1*1 = 1 продолжаем. Если первая строка закончилась И вторая не закончилась стоп 1*0 = 0 фолс типа, и если использовать || (или) получаем остановку только если строки одинаковые по длине... 1 + 1 = 0.. я все правильно понял?
Спасибо. Да уж, мощно!
Спасибо
вам нужно быть преподавателем в вузе!
Для чего в первом примере объявлять указатели? Почему сразу не итерироваться по исходным строкам?
какой еще вариант алгоритма сравнения строк есть? цикл for вы уже применили... менять конструкцию if это наверное не то так как очень просто..., может while...? но у меня не получается в нем нужные условия задать для корректной работы, дайте хоть направление в какую сторону думать...что вы имели ввиду?
#include
int main(void)
{
char s1[12] = "Hello";
char s2[10] = "Hello";
const char *str1 = s1;
const char *str2 = s2;
int i = 0;
for(; str1[i] != '\0' || str2[i] != '\0'; ++i) {
if(str1[i] != str2[i]) {
puts("Strings are not equal!");
return 0;
}
}
puts("Strings are equal!");
return 0;
}
👏👍
Здравствуйте.
Планируйте записать курс по Си#?
пока нет
@@selfedu_ruspochemu
ups....PLEASE HELP!
Inside the loop 'for' you have inserted the double mark '&&'... is it not means the mark '&' (and)? and why you don't use there the mark '|' (or)?
until one of them will be != '\0'; // isn't it?
What do you mean by operator 'if' in the first case, are current chars of the two strings not equal or what? In the second case it is the same line...
int i = 0; // auxiliary loop's counter;
for(; str1[i] != '\0' && str2[i] != '\0'; ++i) // iterate the characters of strings (str1 and str2) until one of them will be != '\0';
if(str1[i] != str2[i]) { // checking if a current char of str1 is not equal a current char of str2;
&& is AND operation. & is bitwise conjunction, the same thing with |.
На 1:30 проговаривается ИЛИ а пишется И.
Делаем цикл пока не дойдем до конца первой строки или второй строки. Все верно. При этом в условии цикла пишем И.
По логике верно, но разница между сказанным и написанным, в моменте, сбивает с толку.
Кстати, да. Путаница между союзами естественного языка и логическими операциями. Классический пример - запрос "Клиенты, живущие в Кентукки и Небраске" выдал "Клиентов нет", потому что никто не жил одновременно в двух штатах. Надо было набирать "в Кентукки ИЛИ Небраске". Аналогично, "Леди и джентльмены" - обращение не к человеку особого пола, в магазине "Овощи и фрукты" продают не только морковку (которая в некоторых странах считается овощем , а в других - фруктом).
Союз И часто употребляется там, где, строго говоря, нужно ИЛИ. Кроме того, ИЛИ может означать как "включающее или", так и исключающее (либо - либо, но не оба вместе, т.е. XOR). Еще больше путаницы, когда дополнительно присутствует отрицание.
Поэтому при составлении программы, лучше говорить не просто И (&&), а добавлять "одновременно": "икс положительно И игрек отрицательно одновременно". А для ИЛИ (||) полезно добавлять "или оба вместе (оба одновременно)".
да уж поймал диссонанс, получется уловие: если 1 строка не закончилась И вторая строка не закончилась --делаем, то есть 1*1 = 1 продолжаем. Если первая строка закончилась И вторая не закончилась стоп 1*0 = 0 фолс типа, и если использовать || (или) получаем остановку только если строки одинаковые по длине... 1 + 1 = 0.. я все правильно понял?
@@MK-xf9kg да