Сидредин
Или почитай документацию
Mr.
Порекомендуйте как можно сократить код
Mr.
Порекомендуйте как можно сократить код
#include <iostream> #include <string> using namespace std; string inputWord(const string s) { string q; while (q.length() != s.length()) { cin >> q; for (auto & c: q) c = toupper(c); if (q.length() != s.length()) { cout << "Длинна вашего слова не соответсвует длинне искомого слова! Повторите попытку" << endl; } cout << "+ означает что буква на своем месте.\n$ означает что буква есть в слове, но не другом месте.\n0 означает что данной буквы нет в искомом слове." << endl; } return q; } void areWordsEquals(const string s, const string q) { string tmp = s; string arr[s.length()]; for (int i = 0; i < s.length(); i++) { arr[i] = '0'; } for (int i = 0; i < s.length(); i++) { if (q[i] == tmp[i]) { arr[i] = '+'; tmp[i] = '@'; cout << arr[i]; } cout << endl; } for (int i = 0; i < s.length(); i++) { if (tmp.find(q[i]) != string::npos) { arr[i] = '$'; cout << arr[i]; } cout << endl; } for (int i = 0; i < s.length(); i++) { cout << arr[i]; } cout << endl; } int main() { string s; cout << "Введите слово: "; cin >> s; for (auto & c: s) c = toupper(c); cout << "данное слово состоит из " << s.length() << " буков." << endl; string q = inputWord(s); while (s != q) { areWordsEquals (s, q); q = inputWord(s); } for (int i = 0; i < s.length(); i++) { cout << "+"; } cout << endl; cout << "Вы ввели слово: " << q << ", и искомое слово: " << s; return 0; }
Azamat
#include <iostream> #include <string> using namespace std; string inputWord(const string s) { string q; while (q.length() != s.length()) { cin >> q; for (auto & c: q) c = toupper(c); if (q.length() != s.length()) { cout << "Длинна вашего слова не соответсвует длинне искомого слова! Повторите попытку" << endl; } cout << "+ означает что буква на своем месте.\n$ означает что буква есть в слове, но не другом месте.\n0 означает что данной буквы нет в искомом слове." << endl; } return q; } void areWordsEquals(const string s, const string q) { string tmp = s; string arr[s.length()]; for (int i = 0; i < s.length(); i++) { arr[i] = '0'; } for (int i = 0; i < s.length(); i++) { if (q[i] == tmp[i]) { arr[i] = '+'; tmp[i] = '@'; cout << arr[i]; } cout << endl; } for (int i = 0; i < s.length(); i++) { if (tmp.find(q[i]) != string::npos) { arr[i] = '$'; cout << arr[i]; } cout << endl; } for (int i = 0; i < s.length(); i++) { cout << arr[i]; } cout << endl; } int main() { string s; cout << "Введите слово: "; cin >> s; for (auto & c: s) c = toupper(c); cout << "данное слово состоит из " << s.length() << " буков." << endl; string q = inputWord(s); while (s != q) { areWordsEquals (s, q); q = inputWord(s); } for (int i = 0; i < s.length(); i++) { cout << "+"; } cout << endl; cout << "Вы ввели слово: " << q << ", и искомое слово: " << s; return 0; }
самое топ решение - переписать на python :D
Azamat
В одну строчку.
кстати, тоже решение))
Azamat
и еще как удобно будет, если будут ошибки, то на одной строке
Mr.
Мдэээ советчики. 😂
Роман
Пройдись дебагером
а фух, разобрался, дебаггер не помог, но понял в чем дело было, просто путь до страницы нужно было стереть и по новой зайти, т.к. ссылка уже не redux_demo чего там была а просто redux
Igor
#include <iostream> #include <string> using namespace std; string inputWord(const string s) { string q; while (q.length() != s.length()) { cin >> q; for (auto & c: q) c = toupper(c); if (q.length() != s.length()) { cout << "Длинна вашего слова не соответсвует длинне искомого слова! Повторите попытку" << endl; } cout << "+ означает что буква на своем месте.\n$ означает что буква есть в слове, но не другом месте.\n0 означает что данной буквы нет в искомом слове." << endl; } return q; } void areWordsEquals(const string s, const string q) { string tmp = s; string arr[s.length()]; for (int i = 0; i < s.length(); i++) { arr[i] = '0'; } for (int i = 0; i < s.length(); i++) { if (q[i] == tmp[i]) { arr[i] = '+'; tmp[i] = '@'; cout << arr[i]; } cout << endl; } for (int i = 0; i < s.length(); i++) { if (tmp.find(q[i]) != string::npos) { arr[i] = '$'; cout << arr[i]; } cout << endl; } for (int i = 0; i < s.length(); i++) { cout << arr[i]; } cout << endl; } int main() { string s; cout << "Введите слово: "; cin >> s; for (auto & c: s) c = toupper(c); cout << "данное слово состоит из " << s.length() << " буков." << endl; string q = inputWord(s); while (s != q) { areWordsEquals (s, q); q = inputWord(s); } for (int i = 0; i < s.length(); i++) { cout << "+"; } cout << endl; cout << "Вы ввели слово: " << q << ", и искомое слово: " << s; return 0; }
для начала может быть объедитнить три цикла в areWordsEquals ;)
Igor
В Каво?
это в где а не в каво ;)
Vladislav
Аа
Vladislav
Ой , я код не посмотрел )
Vladislav
Mr.
Меня учили что функция должна выполнять одно действие. А не то чтоб функция все сама сделала и выдала результат
David
Помогите с Qt. Не записывает данные в QVector… RegData - класс с полями QString login, email и password.
David
Выкидывает много ошибок непонятных
Vyacheslav
#include <iostream> #include <string> using namespace std; string inputWord(const string s) { string q; while (q.length() != s.length()) { cin >> q; for (auto & c: q) c = toupper(c); if (q.length() != s.length()) { cout << "Длинна вашего слова не соответсвует длинне искомого слова! Повторите попытку" << endl; } cout << "+ означает что буква на своем месте.\n$ означает что буква есть в слове, но не другом месте.\n0 означает что данной буквы нет в искомом слове." << endl; } return q; } void areWordsEquals(const string s, const string q) { string tmp = s; string arr[s.length()]; for (int i = 0; i < s.length(); i++) { arr[i] = '0'; } for (int i = 0; i < s.length(); i++) { if (q[i] == tmp[i]) { arr[i] = '+'; tmp[i] = '@'; cout << arr[i]; } cout << endl; } for (int i = 0; i < s.length(); i++) { if (tmp.find(q[i]) != string::npos) { arr[i] = '$'; cout << arr[i]; } cout << endl; } for (int i = 0; i < s.length(); i++) { cout << arr[i]; } cout << endl; } int main() { string s; cout << "Введите слово: "; cin >> s; for (auto & c: s) c = toupper(c); cout << "данное слово состоит из " << s.length() << " буков." << endl; string q = inputWord(s); while (s != q) { areWordsEquals (s, q); q = inputWord(s); } for (int i = 0; i < s.length(); i++) { cout << "+"; } cout << endl; cout << "Вы ввели слово: " << q << ", и искомое слово: " << s; return 0; }
Можно использовать аппенд, и тогда не придется заполнять строку arr нулями Перенести все ифы в один цикл, например?
Виталик Голоенко
А какие есть в с++ преимущества массива символов, перед std::string?
Mr.
В целом никаких. Наверное. Это я привык использовать стринг как массив чаров. Никак не откажусь. Вбили вот в голову что это массив и все
Vyacheslav
Меня учили что функция должна выполнять одно действие. А не то чтоб функция все сама сделала и выдала результат
Тогда все функции были бы в одну строку, без возможности добавлять новые Функция должна выполнять одно действие, которое внутри нее раскладывается на несколько меньших действий, и так же она может вызывать для этого другие функции Условно: чтобы добавить в базу студента мы пишем одну функцию Она должна принять откуда-то данные и внести их в таблицу Добавлять в эту же функцию возможность редактирования записи в базе - это плохая практика Но очевидно же, что строчек кода будет немного больше чем 2, когда мы пишем десяток полей в базу
Vyacheslav
А какие есть в с++ преимущества массива символов, перед std::string?
Там нет массива символов Там есть стринг, с которым работают как с массивом символов Но это все ещё стринг
Igor
чтоб покороче ;) void areWordsEquals(const string s, const string q) { string arr; for (int i = 0; i < s.length(); i++) { arr.push_back(q[i] == s[i] ? '+' : s.find(q[i]) != string::npos ? '$' : 0); } cout << arr << endl; }
Vyacheslav
char a[20], это не массив символов?
А где там нашлось char a[20]? Там string a[20]
Виталик Голоенко
Мне кажется мы друг друга не поняли
Igor
Хм.... А интересно. Спасибо. Вот проблема изначально научили и теперь страдаю
там даже строка арр не нужна можно сразу выводить void areWordsEquals(const string s, const string q) { for (int i = 0; i < s.length(); i++) { cout<< (q[i] == s[i] ? '+' : s.find(q[i]) != string::npos ? '$' : '0'); } cout << endl; }
Mr.
А где там нашлось char a[20]? Там string a[20]
Да там почему то массив стрингов 😂
Vyacheslav
Мне кажется мы друг друга не поняли
Если это был просто общий вопрос то преимуществ у Си строк перед стрингом совершенно никаких нету Стринг может все что могут массивы, плюс он сам выделяет память и имеет набор готовых методов для работы со строковых типом А массив это просто массив
SSS
Ребята всем привет, кто как учить c#? Есть ли у вас roadmap или советы по этому вопросу?
Привет. Посмотри канал extremecode. У него есть подборка книг. Это и есть карта
Mr.
Нет. По условиям если символ на своем месте то + в приоритете а $ тогда уже не используется. Хотя надо проверить
Vyacheslav
Нет. По условиям если символ на своем месте то + в приоритете а $ тогда уже не используется. Хотя надо проверить
Там так и написано, "если s(I) == q(I) пишем плюс Иначе ищем s(I) в строке q находим - ставим доллар, не находим ставим ноль
Igor
DRY: void strToUpper(string &s) { for (auto & c: s) c = toupper(c); } Ну и цикл по факту бесконечный чтобы не повторять условие просто string inputWord(const string s) { string q; while (true) { cin >> q; if (q.length() == s.length()) break; cout << "Длинна вашего слова не соответсвует длинне искомого слова! Повторите попытку" << endl; } strToUpper(s); cout << "+ означает что буква на своем месте.\n$ означает что буква есть в слове, но не другом месте.\n0 означает что данной буквы нет в искомом слове." << endl; return q; }
Vladislav
кто-то работал с либой react-sortable-hoc? пытаюсь поднять её с typescript, но все примеры, которые есть не рабочие (ругается на типы, хотя в теории не должно) кто-то сталкивался? (мб есть какая-то возможность исправить данную ситуацию, расширив стандартные типы?)
Vladislav
Igor
Тут выводит только 0 и 1 если точно попал
незнаю с чего ты это взял ... я запускал код и тестил
Igor
вообще там ноль у тебя без кавычек
Igor
кароче в конечном итоге что то типа такого #include <iostream> #include <string> using namespace std; void strToUpper(string &s) { for (auto & c: s) c = toupper(c); } string inputWord(const string s) { string q; while (true) { cin >> q; strToUpper(q); if (q.length() == s.length()) break; cout << "Длинна вашего слова не соответсвует длинне искомого слова! Повторите попытку" << endl; } cout << "+ означает что буква на своем месте.\n$ означает что буква есть в слове, но не другом месте.\n0 означает что данной буквы нет в искомом слове." << endl; return q; } void areWordsEquals(const string s, const string q) { for (int i = 0; i < s.length(); i++) { cout<< (q[i] == s[i] ? '+' : s.find(q[i]) != string::npos ? '$' : '0'); } cout << endl; } int main() { string s; cout << "Введите слово: "; cin >> s; strToUpper(s); cout << "данное слово состоит из " << s.length() << " буков." << endl; string q; do { q = inputWord(s); areWordsEquals (s, q); } while (s != q); cout << "Вы ввели слово: " << q << ", и искомое слово: " << s; return 0; }
Igor
но это если отталкиваться от твоей структуры кода ;)
Mr.
вообще там ноль у тебя без кавычек
В ковычкпх. Я там даже х поставил сейчас
Igor
дай свой код areWordsEquals
Mr.
void areWordsEquals(const string s, const string q) { //string tmp = s; //string arr[s.length()]; // for (int i = 0; i < s.length(); i++) { // arr[i] = '0'; // } for (int i = 0; i < s.length(); i++) { cout << (q[i] == s[i] ? '+' : s.find(q[i] != string::npos ? '$' : 'x')); } cout << endl; }
Igor
посмотри где у фаинда должна скобка закрываться
Mr.
Ага увидел. Спасибо. Хороший код 👍
Mr.
Шурок
Делай скрины плиз
Igor
ну я бы каут не лепил на каждой строке void areWordsEquals(const string s, const string q) { for (int i = 0; i < s.length(); i++) { char c = '0'; if (q[i] == s[i]) c = '+'; else if (s.find(q[i]) != string::npos) c = '$'; cout << c; } cout << endl; }
Dima
Всем привет, никто не встречал такую проблему на win11. Проводник просто помирает ?
Dima
Igor
Тоже вариант. Спасибо оргомное
Вообще объединять логику и вывод плохая идея ... это если дальше говорить, не только по объему кода Каждый раз передавать в функцию одни и те же значения тоже ... так мы приходим к состоянию и к глобальным переменным что тоже плохо ;) и отсюда плавно к ооп
Dima
Она как то пропадала после удаление драйверов MSI и опять появилась
Dima
А вин 11 вроде ещё бета, или Я что-то пропустил?
ну как я знаю вроде нет, но я жалею, что обновил
Dima
С дисками все норм по состоянию SSD на 96%
Иван
ну как я знаю вроде нет, но я жалею, что обновил
Да Майкрософт в последнее время начали делать полное д€рьм0, извините за выражение.
Dima
ну что за пиздец ☹️
Виталик Голоенко
Иван
Да Майкрософт в последнее время начали делать полное д€рьм0, извините за выражение.
То прикол с обновлением Убунту до винды 10 или 11, я там не помню точно, то ихний новый Повер Шел, а сейчас ответный проводник
Иван
это ты про вс код? ;)
Не, про в целом про Винду
Mr.
Вообще объединять логику и вывод плохая идея ... это если дальше говорить, не только по объему кода Каждый раз передавать в функцию одни и те же значения тоже ... так мы приходим к состоянию и к глобальным переменным что тоже плохо ;) и отсюда плавно к ооп
Запомню.... Возникла проблема. Если символ использовался и мы вывели + то его проверять не надо. А это логика проверит и его тоже, и покажет что есть данный чар в строке. Так что тесты не пройдут
Иван
это ты про вс код? ;)
Кстати, про ВС Студио С++ Комьюнити, он мне теперь говорит, что триальный период вышел ( Хотя Пайчарм Комьюнити такого не выдавал, хоть разработчики другие.
Alan
Всем привет. Ребята, очень нужен совет, не знаю, с кем об этом поговорить. Я начинающий разработчик. Решил войти в профессию с web-а, потратил кучу времени на html, css и понял, что мне это вообще не интересно. При этом сижу без работы, но четко знаю, что разработка - это моё. Куда податься? Заранее спасибо.